我有一个服务器与tomcat进程绑定到端口80和httpd进程绑定到端口5000.由于某种原因,每一个进程发送一个SIGHUP信号到httpd进程我的tomcat进程消失没有任何错误或任何东西。
我通过以下方法解决了服务器上的问题,在httpd.conf中添加了一个显式的ServerName指令,并解决了问题。
我还是不明白为什么SIGHUP把httpd杀死了tomcat进程。
注1:我使用以下命令复制了kill信号:
找出httpd pid是什么。
cat /etc/httpd/run/httpd.pid 4056
然后用一个叹息信号杀死
kill -s SIGHUP 4056
注2:我们解决了这个问题,发现每天早晨凌晨4点运行的logrotate发送一个SIGHUP信号来释放日志,以便能够旋转它们,从而杀死tomcat。
我假设这个tomcat是由apache产生的。
问题可能是,当Apacheclosures它的日志文件时,tomcat试图访问所述日志文件,当它突然发现它已经消失,它只是龙骨死亡。
另一种解释是Apache服务器在重启日志并重新加载configuration文件(SIGHUP启动)的同时也重置了tomcat,还有一些bug或者其他的问题阻止了tomcat在这个时候重启。
正如上面所说的,如果您从Apache内部运行的PHP脚本启动Tomcat,则可能会发生这种情况。 我遇到了这个问题,并且认为我会在这里注意到以下对于其他人来说:-)。
用setsid启动Tomcat,这将确保它被放到它自己的进程组中,完全隔离它与你或者logrotate发送给Apache的任何信号(包括SIGHUP)。 尝试像这样:
/ usr / bin / setsid $ CATALINA_HOME / bin / startup.sh