微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您如何知道syslog-ng是否停止了您的监听进程?

我写了一个PHP程序,它通过syslog-ng.conf挂接到syslog-ng中,基本上是这样的:

while (!feof(STDIN)) {
    $input = fgets(STDIN);
    process($input);
}
cleanup();

我定义了process()和cleanup().

我面临的问题是,从不调用cleanup(2),并且我需要在程序退出之前执行它.

我尝试使用pcntl_signal()捕获SIGTERM,SIGHUP和SIGPIPE,并且该应用程序的那部分工作正常(如果我在PHP进程上使用kill -1,则信号处理程序将被调用并运行cleanup()),但是看来我没有从syslog-ng获得这些消息.

我曾尝试将STDIN设置为非阻塞,以为PHP不会调用信号处理程序,因为流已阻塞.那也不起作用,我的信号处理程序也不会被调用.

我怎么知道syslog-ng何时停止我的应用程序,所以我可以做一些清理?

谢谢,
汤姆

更新:我已经尝试捕获从1到31的所有信号,并且在重新启动syslog-ng(或被SIGTERM杀死)时,它仍然没有收到任何信号.

解决方法:

也许尝试将cleanup()注册PHP shutdown function,如下所示:

function cleanup(){}
register_shutdown_function("cleanup");

从理论上讲,这将导致PHP退出之前执行该功能.但是,当与强制停止选项(例如kill)一起使用时,这可能不起作用,因此(还有另一个)是在黑暗中拍摄的.

我希望您能找到有用的方法.我也会对学习结果感兴趣.

编辑:很高兴为您解决了这个问题!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐