Я написал программу PHP, которая подключается к syslog-ng
(через syslog-ng.conf
), и это в основном это:
while (!feof(STDIN)) {
$input = fgets(STDIN);
process($input);
}
cleanup();
, где process()
и cleanup()
определены мной.
Проблема, с которой я сталкиваюсь, заключается в том, что cleanup(2)
никогда не вызывается, и мне нужно, чтобы он был выполнен до выхода из программы.
Я пытался перехватить SIGTERM, SIGHUP и SIGPIPE, используя pcntl_signal()
, и эта часть приложения, кажется, работает нормально (если я использую kill -1 в процессе PHP, мой обработчик сигнала вызывается и запускается cleanup()
), но, похоже, я не получаю эти сообщения от syslog-ng.
Я попытался настроить STDIN на неблокирование, думая, что PHP не будет вызывать обработчики сигналов, потому что поток блокируется. Это тоже не сработало, мои обработчики сигналов не были бы вызваны.
Как узнать, когда syslog-ng собирается остановить мое приложение, чтобы я мог выполнить некоторую очистку?
Спасибо,
Том
ОБНОВЛЕНИЕ: Я пытался перехватить все сигналы от 1 до 31, и он все еще не получает ничего, когда syslog-ng перезапускается (или уничтожается с помощью SIGTERM).