syslog-ng
(経由で)フックするPHPプログラムを作成しましたが、syslog-ng.conf
基本的には次のとおりです。
while (!feof(STDIN)) {
$input = fgets(STDIN);
process($input);
}
cleanup();
whereprocess()
とcleanup()
は私が定義したものです。
私が直面している問題は、cleanup(2)
呼び出されないことであり、プログラムが終了する前に実行する必要があります。
SIGTERM、SIGHUP、および SIGPIPE を使用してキャッチしようとしましpcntl_signal()
たが、アプリケーションのその部分は正常に動作しているようです (PHP プロセスで kill -1 を使用すると、シグナル ハンドラーが呼び出されて実行されますcleanup()
)。これらのメッセージを syslog-ng から取得します。
ストリームがブロックされているため、PHP がシグナルハンドラーを呼び出さないと考えて、STDIN を非ブロックに設定しようとしました。それもうまくいきませんでした。私のシグナルハンドラは呼び出されませんでした。
syslog-ng がアプリケーションを停止しようとしていることをどのように知ることができるので、クリーンアップを行うことができますか?
ありがとう、トム
更新: 1 から 31 までのすべてのシグナルをキャッチしようとしましたが、syslog-ng を再起動しても (または SIGTERM で強制終了しても) 何も受信しません。