在从 cron 运行的 php 脚本开始超时后,我注意到了这个问题,但是从命令行手动运行它不是问题。(对于 CLI,PHP 的 max_execution_time 默认为 0)
所以我尝试运行一个简单的cron,例如:
50 8 * * * php -q /tmp/phpinfo.php > /tmp/phpinfo
该脚本只会调用 phpinfo()。
令人惊讶的是,它以 html 格式写出了 phpinfo,这表明它没有作为 CLI 运行。输出中的 max_execution_time 为 30。
从命令行手动运行脚本,例如
php -q /tmp/phpinfo.php | less
以文本格式写出 php 信息,输出中的 max_execution_time 为 0。
我知道某处一定存在配置问题,但我就是找不到问题所在。这发生在我完全控制的生产服务器上。在我的开发机器上从 cron 运行相同的脚本运行良好。
这是差异的摘要
function | CLI | cron |
php_sapi_name | cli | cgi-fcgi |
php_ini_loaded_file | /usr/local/lib/php.ini | /usr/local/lib/php.ini |