【发布时间】:2011-03-28 12:00:51
【问题描述】:
我有一个命令,当直接在命令行上运行时,它可以按预期工作。它运行超过 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,这正好证明了我的想法,我真的不明白为什么这个脚本在最大执行时间上失败了!
【问题讨论】:
-
如果从命令行而不是 cron 运行 PHP 脚本会发生什么?
-
您说“在命令行上直接运行时工作正常”,但这还不够信息:尽管在 shell 提示符下工作正常,但 PHP 的 max/exec 是否需要 30 秒/time 设置(忘记确切名称)显然设置为?
-
@George - 我曾假设通过 exec() 运行脚本等同于在 CLI 下运行它 - 不是这样吗?
-
我降低了这个问题,因为尽管多次被问到从命令行执行脚本需要多长时间,但由于某种原因他拒绝回答。
-
@George - 有点苛刻,因为我已经 afk,我没有拒绝回答任何事情!从命令行运行脚本需要 30 多秒,但它并不像被调用的脚本调用脚本那样简单,该脚本又调用许多其他脚本,并且被调用的脚本抛出错误
标签: php shell command-line