gpt4 book ai didi

php - 你怎么知道 syslog-ng 是否停止了你的监听守护进程?

转载 作者:可可西里 更新时间:2023-11-01 01:10:45 25 4
gpt4 key购买 nike

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

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 何时将停止我的应用程序,以便我可以进行一些清理?

谢谢,汤姆

更新:我已经 try catch 所有信号,从 1 到 31,但当 syslog-ng 重新启动(或被 SIGTERM 终止)时它仍然没有收到任何信号。

最佳答案

也许尝试将 cleanup() 注册为 PHP shutdown function ,像这样:

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

理论上这会导致 php 在退出之前执行该函数。但是,当与强制停止选项(如 kill)一起使用时,这可能不起作用,因此它(又一个)是在黑暗中拍摄的。

我希望你能找到有用的东西。我也有兴趣了解结果。

编辑:我很高兴这对你有用!

关于php - 你怎么知道 syslog-ng 是否停止了你的监听守护进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1651532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com