gpt4 book ai didi

PHP cron 作业由于最大执行时间 fatal error 而提前终止

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:39:31 28 4
gpt4 key购买 nike

我有一个 PHP cron 作业在运行 29 分钟后失败。日志中的错误 (/var/log/php_errors.log) 是:

[01-Mar-2012 00:32:57 UTC] PHP Fatal error: Maximum execution time of 60 seconds exceeded in /path/file.php on line 2079

触发 cron 的 crontab 条目是:

00 00 * * * /usr/bin/php /path/file.php

根据我的研究,我认为这与 max_execution_time 配置设置无关,因为:

  1. 我确实知道它运行了 29:18 分钟(即比错误消息多了 60 秒)。
  2. 来自 the PHP docs - 从命令行运行 PHP 时,默认设置为 0。

问:为什么脚本提前终止?


注意事项:

脚本非常繁重,确实运行了数千个数据库查询,但我运行的是 top,CPU 负载并不高。

错误日志中的行是 mysql_query 调用:

$sql = "SELECT SUM(amount) FROM mytab WHERE mem = '$id' AND validto > '$now'";
$res = mysql_query($sql);

> php -v
PHP 5.3.10 (cli) (built: Feb 2 2012 17:34:38)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with Suhosin v0.9.33, Copyright (c) 2007-2012, by SektionEins GmbH

> cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.7 (Tikanga)

更新 - 我发现了为什么脚本可以实时运行 29 分钟,但 PHP 可以退出引用执行时间更短。

Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running.

(来自 the set_time_limit() docs ,但也在 the max-execution-time docs 中提到)。这对我来说很重要,因为大部分脚本都是长时间运行的数据库查询和支付 API 调用,它们不会增加执行时间。

最佳答案

好吧,你可以为时间限制设置一个更大的值,或者你可以使用 set-time-limit() 设置它为无限。 :

<?php set_time_limit(0); ?>

但实际上我也在脚本的开头使用了它

ignore_user_abort(1);

关于PHP cron 作业由于最大执行时间 fatal error 而提前终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9512413/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com