我有一个命令,当直接在命令行上运行时,它可以按预期工作。它运行超过 30 秒并且没有抛出任何错误。当通过 PHP 函数 exec()(包含在由 cron 调用的脚本中)通过 PHP 脚本调用相同的命令时,它会抛出以下错误:
最长执行时间为 30 秒
超过
我们有很多服务器,我在一个非常相似的服务器上运行这个命令,具有完全相同的数据集,没有任何问题,所以我很高兴没有脚本级问题。我越来越倾向于认为这与服务器级别的某些内容有关 - 无论是在 PHP 设置中还是在某种程度上的服务器设置中,但真的不确定在哪里查找。对于那些感兴趣的人来说,两台服务器的最大执行时间均为 30 秒。
命令本身是这样调用的 -
从命令行为:
root@server>php -q /path/to/file.php
这有效...
并通过 PHP 文件中的 cron 如下:
exec("php -q /path/to/file.php");
这会引发最大执行时间错误。我一直认为从命令行运行 PHP 时没有执行时间限制。
我应该指出,被调用的脚本调用了许多其他脚本,并且这些脚本之一出现了错误。查看我的日志,最大执行时间错误实际上也发生在 30 秒之前!因此,在调用后不到 30 秒,由 cron 脚本调用的脚本(似乎以 CLI 方式运行)将抛出最大执行错误。
为了检查脚本是否按我的预期运行(作为没有最大执行时间的 CLI),我执行了以下检查:
包含以下代码的 PHP 脚本:
// test.php
echo exec("php test2.php");
其中 test2.php 包含:
echo ini_get('max_execution_time');
这个脚本的运行方式如下:
root@server> php test.php
// returns 0
这证明以这种方式调用的脚本正在 CLI 下运行,最大执行时间为 0,这正好证明了我的想法,我真的不明白为什么这个脚本在最大执行时间上失败!