У меня есть команда, которая при запуске напрямую в командной строке работает, как ожидалось. Он работает более 30 секунд и не выдает никаких ошибок. Когда та же команда вызывается через скрипт PHP через функцию php exec () (которая содержится в скрипте, вызываемом cron), она выдает следующую ошибку:
Максимальное время выполнения 30 секунд
превышено
У нас есть несколько серверов, и я выполнил эту команду на очень похожем сервере с точно таким же набором данных без каких-либо проблем, поэтому я рад, что нет проблем на уровне сценариев. Я становлюсь более склонным думать, что это связано с чем-то на уровне сервера - либо в настройке PHP, либо в настройке сервера каким-то образом, но на самом деле не уверен, где искать. Для тех, кто заинтересован, оба сервера имеют максимальное время выполнения 30 секунд.
сама команда называется так -
из командной строки как:
root@server>php -q /path/to/file.php
это работает ...
и через cron в файле PHP как:
exec("php -q /path/to/file.php");
это выдает ошибку максимального времени выполнения. я всегда понимал, что при запуске PHP из командной строки не было ограничений по времени выполнения.
Я должен указать, что вызываемый скрипт вызывает ряд других скриптов, и он является ошибочным. Глядя на мои журналы, ошибка максимального времени выполнения на самом деле происходит раньше, чем через 30 секунд! Таким образом, менее чем через 30 секунд после вызова сценарий, вызываемый сценарием cron, который, по-видимому, выполняется, поскольку CLI выдает ошибку максимального выполнения.
Чтобы проверить, что скрипт работает так, как я ожидал (как CLI без максимального времени выполнения), я выполнил следующую проверку:
PHP-скрипт, содержащий этот код:
// test.php
echo exec("php test2.php");
, где test2.php содержит:
echo ini_get('max_execution_time');
и этот скрипт запускается так:
root@server> php test.php
// returns 0
Это доказывает, что скрипт, вызываемый таким образом, работает под CLI с максимальным временем выполнения 0, что только подтверждает мои мысли, я действительно не могу понять, почему этот скрипт не работает в течение максимального времени выполнения!