jcmd 在控制台中工作但在脚本中失败

jcmd 在控制台中工作但在脚本中失败

我对本来应该简单的任务感到抓狂:一个 Java 进程正在运行,内存不足,并且一个脚本正在运行。

SELinux 是已禁用

在 setenv.sh 中:

-XX:OnOutOfMemoryError='/opt/alfresco/scripts/dumpNrestart.sh > /tmp/dumpNrestart.log 2>&1'

在 /etc/sudoers.d/alfresco_sudoers 中:
%alfresco ALL= NOPASSWD: /opt/alfresco/java/bin/jcmd

在 dumpNrestart.sh 中:
#!/bin/sh -x
PIDDE=$(cat /opt/alfresco/tomcat/temp/catalina.pid)
/bin/rm -f /tmp/"$PIDDE".hprof
/bin/sudo /bin/id
/bin/sudo /opt/alfresco/java/bin/jcmd "$PIDDE" GC.heap_dump /tmp/"$PIDDE".hprof
/opt/alfresco/tomcat/bin/shutdown.sh -force

使用非特权用户从 bash 运行 dumpNrestart.sh 可以工作,但由 JVM(以同一用户运行)调用时则不行:
++ cat /opt/alfresco/tomcat/temp/catalina.pid
+ PIDDE=11451
+ /bin/rm -f /tmp/11451.hprof
+ /opt/alfresco/java/bin/jcmd 11451 GC.heap_dump /tmp/11451.hprof
11451:
com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file /proc/11451/root/tmp/.java_pid11451: target process 11451 doesn't respond within 10500ms or HotSpot VM not loaded
        at jdk.attach/sun.tools.attach.VirtualMachineImpl.<init>(VirtualMachineImpl.java:100)
        at jdk.attach/sun.tools.attach.AttachProviderImpl.attachVirtualMachine(AttachProviderImpl.java:58)
        at jdk.attach/com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:207)
        at jdk.jcmd/sun.tools.jcmd.JCmd.executeCommandForPid(JCmd.java:114)
        at jdk.jcmd/sun.tools.jcmd.JCmd.main(JCmd.java:98)
+ /opt/alfresco/tomcat/bin/shutdown.sh -force

我猜这是一个权限/特权问题,但是须藤我以为我已经完成了...但正如我们所见,我并没有完成。

有什么想法吗?我可以尝试一下吗?

感谢您花时间阅读本文!

答案1

尝试使用 & 。这将使脚本在后台运行。并且它将具有访问权限。

-XX:OnOutOfMemoryError ='sh /opt/alfresco/scripts/dumpNrestart.sh&'

相关内容