我有一个通过Nagios调用的在PHP 5.5&PHP 7上通过CLI运行的PHP脚本,超时后Nagios在该脚本上运行了一个非常不友好的kill -9。
所以我希望用户能够在命令行上指定一个超时(我使用getopt抓取)来启动计时器,然后让脚本照常继续。
结果应为:
计时器应该用于整个脚本,而不仅仅是单个函数调用(允许或花费几微秒的时间来设置计时器就可以了)
这似乎很简单,但是我似乎找不到解决方法,我所能找到的所有信息都是围绕执行超时设置的,此后脚本无任何控制地退出,所以我无法向Nagios发出消息,超时。
有什么想法吗?谢谢。
答案 0 :(得分:0)
嗯,好吧,看来我唯一可以想到的方法就是这样(任何改进的建议都很好)
使用以下命令在Linux下调用脚本
timeout --signal = SIGHUP 120s script.php ....
在PHP脚本中放入以下内容:
// Protect from some causes of death
function sig_handler($sig) {
echo "UNKNOWN, Script Dying: I was killed before the requested work could be completed. (Execution Time " .
round((microtime() - $GLOBALS['timer']),2) . " secs)" . PHP_EOL;
exit (3);
}
// Start Timer
$timer = microtime(true);
// Catch Signals
pcntl_signal(SIGINT, "sig_handler");
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGHUP, "sig_handler");
显然计时器是可选的