У меня есть 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
Запись crontab, которая запускает cron:
00 00 * * * /usr/bin/php /path/file.php
Из моего исследования я не думаю, что это связано с настройкой конфигурации max_execution_time
, потому что:
В: Почему скрипт завершает работу раньше времени?
Примечания:
Сценарий очень тяжелый и выполняет многие тысячи запросов к БД, но я запускал top
и загрузка процессора была невысокой.
Строка из журнала ошибок — это вызов 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)
Update— я выяснил, почему скрипт может работать в течение 29 минут реального времени, но PHP может выходить из цитирования времени выполнения намного ниже.
Любое время, затраченное на действия, происходящие вне выполнения скрипта, такие как системные вызовы с использованием system(), потоковые операции, запросы к базе данных и т. д., не учитывается при определении максимального времени выполнения скрипта.
(из документации set_time_limit(), но также упомянутой в документации максимального времени выполнения). Это было актуально для меня, потому что большая часть скрипта представляла собой длительные запросы к базе данных и вызовы платежного API, которые не будут увеличивать время выполнения.