java可以调用脚本在solaris中重新启动java吗?

java可以调用脚本在solaris中重新启动java吗?,java,solaris,Java,Solaris,我们有一个运行webapp的jboss应用服务器。我们需要在UI中的某个地方实现一个“重启”按钮,使整个应用服务器重启。我们天真的实现是使用restart命令调用/etc/init.d脚本。这会关闭应用程序服务器,然后重新启动它 但是,当java进程关闭时,运行重启脚本的子进程也会在脚本中再次启动应用服务器之前死亡 我们尝试在调用脚本的地方添加“&”,但没有帮助。是否有一些地方可以在不终止脚本进程的情况下启动脚本并终止它?尝试使用nohup命令从脚本中运行一些东西,这些东西是通过Java执行的。

我们有一个运行webapp的jboss应用服务器。我们需要在UI中的某个地方实现一个“重启”按钮,使整个应用服务器重启。我们天真的实现是使用restart命令调用/etc/init.d脚本。这会关闭应用程序服务器,然后重新启动它

但是,当java进程关闭时,运行重启脚本的子进程也会在脚本中再次启动应用服务器之前死亡


我们尝试在调用脚本的地方添加“&”,但没有帮助。是否有一些地方可以在不终止脚本进程的情况下启动脚本并终止它?

尝试使用
nohup
命令从脚本中运行一些东西,这些东西是通过Java执行的。也就是说,如果从Java执行的脚本当前运行以下命令:

/etc/init.d/myservice restart
然后将其更改为执行以下操作:

nohup /etc/init.d/myservice restart
另外,确保Java进程没有截获stdin、stdout或stderr。这可能会导致潜在的问题。因此,可以尝试以下方法(假设bash或sh):


将重新启动脚本中的信号处理程序设置为使用陷阱忽略信号:

trap "" 2 #  ignore SIGINT
trap "" 15 # ignore SIGTERM

完成此操作后,您需要在需要时使用其他信号(可能是SIGKILL)终止重启脚本。

这在某些情况下可能有效,但不幸的是,不是我们的。我们的服务器进程本身是用nohup启动的。所以要阻止它,我们需要发送SIGINT或SIGTERM。尽管有nohup,这些代码还是会传播到重启脚本。另一种方法是将init.d配置为在应用程序服务器停止时重新启动。然后,您只需要关闭JVM,让Solaris再次启动它。
trap "" 2 #  ignore SIGINT
trap "" 15 # ignore SIGTERM