syslog-ng
我编写了一个与(via )挂钩的 PHP 程序,syslog-ng.conf
它基本上是这样的:
while (!feof(STDIN)) {
$input = fgets(STDIN);
process($input);
}
cleanup();
在哪里process()
和cleanup()
由我定义。
我面临的问题是它cleanup(2)
永远不会被调用,我需要在程序退出之前执行它。
我试图使用 SIGTERM、SIGHUP 和 SIGPIPE 来捕获 SIGTERM、SIGHUP 和 SIGPIPE,pcntl_signal()
并且该应用程序的这一部分似乎工作正常(如果我在 PHP 进程上使用 kill -1,我的信号处理程序被调用并运行cleanup()
),但似乎我不是从 syslog-ng 获取这些消息。
我尝试将 STDIN 设置为非阻塞,认为 PHP 不会调用信号处理程序,因为流是阻塞的。那也不起作用,我的信号处理程序不会被调用。
我如何知道 syslog-ng 何时将停止我的应用程序,以便进行一些清理工作?
谢谢,汤姆
更新:我试图捕捉从 1 到 31 的所有信号,但当 syslog-ng 重新启动(或被 SIGTERM 杀死)时,它仍然没有收到任何信号。