您如何知道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)一起使用时,这可能不起作用,因此(还有另一个)是在黑暗中拍摄的.

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

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...