【发布时间】:2019-09-06 10:46:06
【问题描述】:
我有一个 PHP 脚本在 Nagios 调用的 PHP 5.5 和 PHP 7 上通过 CLI 运行,超时后 Nagios 在脚本上运行一个非常不友好的 kill -9。
所以我希望用户能够在命令行(我使用 getopt 抓取)上指定一个超时来启动一个计时器,然后让脚本继续正常运行。
结果应该是:
- 脚本运行时间过长,调用函数退出脚本并停止任何未完成的操作(例如,PDO DB 查询耗时过长)
- 脚本在超时前完成,脚本正常退出并取消定时器
计时器应该用于整个脚本,而不仅仅是单个函数调用(给或花几微秒来设置计时器,这很好)
这似乎很简单,但我似乎找不到方法,我能找到的所有信息都是关于设置执行超时,在此之后脚本无法控制地退出,所以我无法向 Nagios 回复有超时。
有什么想法吗?谢谢。
【问题讨论】:
-
看起来很简单。它不是。至少使用香草 PHP。你想要的是 Promises 和异步/并行处理。为此,您需要一个第三方库,例如 react (reactphp.org) 或 amp (github.com/amphp/amp)
-
费了很大力气,可惜没有内置一些东西,但是感谢您提供的信息,我已将此添加到功能请求bugs.php.net/bug.php?id=27297