php 限制调用外部脚本的持续时间

uqjltbpv  于 2023-01-19  发布在  PHP
关注(0)|答案(1)|浏览(139)

我正在使用Symfony与Office365邮件服务器对话,通过调用Symfony命令,在一个cronned进程中(每分钟)。
显然,偶尔通信中的一些东西会卡住,我的php脚本继续运行-即使在下一个预定调用发生之后,所以我有2个,然后3个,然后4个脚本并行运行。
问题是:我如何可靠地将此Symfony命令调用的总持续时间限制为最长1分钟?
我之所以说"总持续时间",是因为我确实尝试过设置max_execution_time,即set_time_limit(60),但显然此设置不计入对其他脚本的任何外部调用-因此不会计算MX服务器响应的任何等待。
我还想尝试设置max_input_time,但在我的情况下没有工作,出于2个原因:1.显然Symfony控制台不知何故用-1覆盖了我的常规php.ini值,2.我不能在Symfony脚本中手动设置这个设置。无论我用ini_set("max_input_time", XX)设置它,它都保持在"无限"值(-1)。谢谢!

oknrviil

oknrviil1#

但显然,此设置不计入对其他脚本的任何外部调用
实际上,就像https://www.php.net/manual/en/function.set-time-limit.php
设置的时间限制()函数和配置指令max_execution_time只影响脚本本身的执行时间。在脚本执行之外发生的活动(例如使用system的系统调用)上花费的任何时间()、流操作、数据库查询等。在确定脚本已运行的最长时间时,不包括这些时间。在Windows上,测量的时间是真实的因此不适用。
为调用API设置一个超时怎么样?如果使用Guzzle,请访问https://docs.guzzlephp.org/en/stable/request-options.html#timeout

// Timeout if a server does not return a response in 3.14 seconds.
$client->request('GET', '/delay/5', ['timeout' => 3.14]);

然后必须确保set_time_limit() +timeout设置的限制小于cron为运行脚本保留的时间间隔。

相关问题