我们正在对此进行内部辩论。在 RHEL 上运行 jboss eap 7。kill -9
我们目前有一个脚本可以通过简单地在 java 进程上运行来停止服务器。
我的建议是使用正确的 jboss 命令关闭:
jboss-cli --connect --commands=:shutdown
我们如何确保 jboss 优雅地关闭杀戮?我正在推动使用 jboss 命令。
我们正在对此进行内部辩论。在 RHEL 上运行 jboss eap 7。kill -9
我们目前有一个脚本可以通过简单地在 java 进程上运行来停止服务器。
我的建议是使用正确的 jboss 命令关闭:
jboss-cli --connect --commands=:shutdown
我们如何确保 jboss 优雅地关闭杀戮?我正在推动使用 jboss 命令。
如果该软件不重要,并且带有一个记录在案的关闭它的方法,就像这里的情况一样,不管它是什么。(可能有多种选择。)
特别是关于
SIGKILL
(signal9
),它没有任何优雅之处。目标进程无法拦截和处理这个信号;它只是立即终止,而没有完成它正在做的事情或做任何通常在关闭之前会做的清理工作。
至于一般的信号,如果目标是某种形式的正常关闭,请查看软件如何处理
SIGTERM
和/或SIGINT
. 软件至少有可能将这些考虑在内并优雅地关闭。SIGKILL
当正常关闭服务不起作用时,应将其视为最后的手段。假设每把枪都上膛,每个应用程序都是
signal 9 unsafe
. 否则,您很可能会浪费大量时间来调试偶尔出现的故障,这些故障是由日志文件轮换期间碰巧发出的强制关闭等简单的事情引起的。存在
signal 9 safe
意味着将状态更改限制为原子事务,很少有状态应用程序真正做到这一点。在 Java 世界中,您不会偶尔杀死卡住的东西。但是您关闭应用程序的主要方法应该是一种优雅的方法,并且通过该方法关闭的失败应该至少与您的软件堆栈中的任何其他错误一样受到相同的审查。
根据官方 RedHat 文档,信号 SIGHUP、SIGINT 和 SIGTERM 触发优雅关闭。SIGKILL (kill -9) 没有。