为什么一个SIGHUP信号给httpd杀死了tomcat进程?

我有一个服务器与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