У меня задание 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
, потому что:
- Я точно знаю, что он работал в течение 29:18 минут (т. е. намного больше, чем 60 с, как сообщение об ошибке).
- С Документы PHP - При запуске PHP из командной строки значение по умолчанию равно 0.
В: Почему скрипт завершается раньше?
Примечания:
Сценарий очень тяжелый и выполняет много тысяч запросов к БД, но я выполнял 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)
Обновление - я выяснил, почему скрипт может работать в течение 29 минутреального времени, но PHP может значительно сократить время выполнения цитирования.
Любое время, затрачиваемое на действия, происходящие вне выполнения сценария, такие как системные вызовыиспользование system (), потоковые операции, запросы к базе данных и т. д. не учитывается при определении максимального времени выполнения сценария.
(из set_time_limit () docs , но также упоминается в документация о максимальном времени выполнения ).Это было актуально для меня, потому что большая часть скрипта долго выполняла дБ-запросы и платежные API-вызовы, которые не будут приводить к увеличению времени выполнения.