Назад | Перейти на главную страницу

Почему сигнал SIGHUP для httpd убивает процесс tomcat?

У меня есть сервер с привязкой процесса tomcat к порту 80 и привязкой процессов httpd к порту 5000. По какой-то причине каждый раз, когда какой-либо процесс отправляет сигнал SIGHUP процессу httpd, мой процесс tomcat исчезает без ошибок или чего-то еще.

Я исправил проблему на сервере следующим образом, добавил явную директиву ServerName в httpd.conf, и это устранило проблему.

Я до сих пор не понимаю, почему SIGHUP для httpd убил процесс tomcat.

ПРИМЕЧАНИЕ 1. Я воспроизвел сигнал уничтожения с помощью следующей команды:

узнать, что такое httpd pid.

cat /etc/httpd/run/httpd.pid
4056

затем убить сигналом вздоха

kill -s SIGHUP 4056

ПРИМЕЧАНИЕ 2: Мы устраняем проблему и обнаруживаем, что logrotate, запускаемый каждое утро в 4 часа ночи, отправлял сигнал SIGHUP, чтобы повторно запустить журналы, чтобы иметь возможность вращать их, тем самым убивая tomcat.

Я предполагаю, что кот порожден apache.

Проблема может заключаться в том, что когда Apache закрывает свои файлы журналов, tomcat пытается получить доступ к указанному файлу журнала, и когда он внезапно обнаруживает, что он исчез волшебным образом, он просто падает и умирает.

Другое объяснение будет заключаться в том, что сервер Apache также сбрасывает tomcat при ротации журналов и перезагрузке файлов конфигурации (которые инициирует SIGHUP), и какая-то ошибка или другая ошибка препятствует перезапуску tomcat в это время.

Как было сказано выше, это может произойти, если вы запускаете Tomcat из сценария PHP, запущенного внутри Apache. Я столкнулся с этим и подумал, что отмечу здесь следующее, если кому-то еще удалось зайти так далеко :-).

Запустите Tomcat с помощью setsid, это гарантирует, что он помещается в свою собственную группу процессов, полностью изолируя его от любых сигналов (включая SIGHUP), которые вы или logrotate отправляете в Apache. Попробуйте что-нибудь вроде:

/ usr / bin / setsid $ CATALINA_HOME / bin / startup.sh