PHP: превышено время выполнения 30 секунд в долгом скрипте — cron и CLI

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

Увеличьте max_execution_time или перенесите задачу в CLI/cron.

В этой статье
  1. Что означает сообщение
  2. Причины и признаки
  3. Пошаговое решение
  4. На что обратить внимание

#Что означает сообщение

Сообщение
Время выполнения превышено

Увеличьте max_execution_time или перенесите задачу в CLI/cron.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Малый лимитЗапрос ровно по лимиту PHP завершаетсяОптимизировать или изменить обоснованный лимит
Тяжёлый запросВ журнале длительный SQL-запросПроверить план и индексы
Внешний APIОжидание ответа API длится слишком долгоНазначить тайм-аут клиента
Бесконечный циклПостоянно повторяется одна итерацияУстранить цикл и добавить контроль прогресса

#Пошаговое решение

  1. Выясните, кто именно ограничивает выполнениеОткройте журнал PHP: Maximum execution time of 30 seconds exceeded относится к PHP, а HTTP 504 может дополнительно означать тайм-аут обратного прокси или PHP-FPM. Сверьте код проблемной функции и длительность по журналу, определите, выполняется ли работа через браузер или планировщик. max_execution_time у CLI часто не ограничен по умолчанию; настройки веб-сайта и терминала различаются.
  2. Разбейте продолжительную операцию на частиЕсли скрипт обрабатывает тысячи записей, измените алгоритм на небольшие пакеты с сохранением прогресса после успешного пакета. Для SQL добавьте постраничное чтение или потоковую обработку, для HTTP-запросов — индивидуальные тайм-ауты и ограниченные повторы. Не делайте бесконечный цикл ожидания, а фиксируйте обработанные идентификаторы, чтобы повторный запуск не дублировал результаты.
  3. Перенесите фоновую задачу из веб-запроса в CLIДля регламентной работы предпочтительнее запуск из CLI через планировщик cron или системный таймер, где можно отдельно ограничить память, общее время и журнал. Команду проверяйте вручную из каталога проекта, например php /srv/app/bin/job.php, заменив путь на реальный и убедившись, что скрипт рассчитан на CLI. У cron другое рабочее окружение, поэтому используйте абсолютные пути и отдельную сервисную учётную запись. Не переносите просто HTTP-адрес в cron вместо реального обработчика.
  4. Если нужен лимит, измените его адресно и проверьтеТолько после измерения администратор может задать в активной конфигурации веб-PHP обоснованный max_execution_time, например 60, согласовав его с request_terminate_timeout PHP-FPM и тайм-аутами Nginx/Apache. Увеличение одного параметра не гарантирует успех. Повторите задачу, проверьте запись о завершении и отсутствие 504 и роста очереди рабочих процессов. Если скорость не меняется, верните прежний лимит и оптимизируйте код.

#На что обратить внимание

Не увеличивайте все тайм-ауты до часов для обычных веб-запросов: это займёт рабочие процессы и ухудшит доступность сайта. Проверьте обработку повторных запусков.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.