Преждевременное завершение задания PHP cron из-за фатальной ошибки максимального времени выполнения

У меня есть 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, потому что:

  1. Я точно знаю, что это работал в течение 29:18 минут (т.е. намного больше, чем 60 секунд, как сообщение об ошибке).
  2. Из документации по 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)

Update— я выяснил, почему скрипт может работать в течение 29 минут реального времени, но PHP может выходить из цитирования времени выполнения намного ниже.

Любое время, затраченное на действия, происходящие вне выполнения скрипта, такие как системные вызовы с использованием system(), потоковые операции, запросы к базе данных и т. д., не учитывается при определении максимального времени выполнения скрипта.

(из документации set_time_limit(), но также упомянутой в документации максимального времени выполнения). Это было актуально для меня, потому что большая часть скрипта представляла собой длительные запросы к базе данных и вызовы платежного API, которые не будут увеличивать время выполнения.

5
задан Tom 15 June 2013 в 08:59
поделиться