PHP и Laravel
Laravel Scheduler работает локально, но не запускается на сервере
Laravel Scheduler работает локально, но пропускает задачи на сервере. Разберём, кто запускает расписание и как проверить время, условия и результат выполнения.
Что происходит и с чего начать
Описание расписания в Laravel не запускает его само по себе. На сервере нужен предусмотренный механизм, который регулярно вызывает планировщик. Затем уже планировщик определяет, какие задачи пора выполнять. Поэтому сначала различают два отказа: вызов вообще не происходит или задача пропускается внутри расписания. Причиной второго могут быть время, окружение, блокировка предыдущего запуска и условия задачи. Рабочая локальная команда подтверждает только возможность запуска в одном окружении, но не штатную работу серверного расписания.
Что можно проверить самостоятельно
- Запишите ожидаемое время, часовой пояс и последнее подтверждённое выполнение. Сравните их с конфигурацией приложения и сервера, не меняя часовой пояс наугад для всего проекта.
- Уточните механизм регулярного вызова: cron или отдельный процесс. Проверьте рабочий каталог, пользователя и версию PHP, которые он использует в реальной установке.
- Посмотрите, есть ли незавершённая предыдущая задача или запись об ошибке. Не удаляйте все блокировки автоматически: прежняя операция ещё может выполнять внешнее действие.
Как понять результаты проверки
Специалист проверяет расписание в рабочем окружении и условия доступности задачи. Если она ставит задания в очередь, успешный запуск Scheduler ещё не гарантирует их выполнение: нужен соответствующий worker. Поэтому прослеживают весь путь до результата. Также проверяют, не осталось ли второе расписание на старом сервере. Без этого восстановление запуска создаст дубли. Полезны отдельные записи о начале, завершении и ошибке, позволяющие отличить пропуск запуска от неудачной обработки после него без догадок по отсутствующему письму.
Что проверяет разработчик
Для этой части понадобятся доступ к настройкам, журналам ошибок или коду. Её можно передать специалисту вместе с результатами предыдущих шагов.
- Уточните способ запуска scheduler в этой установке: cron или управляемый процесс. Проверьте команду, пользователя и рабочий каталог.
- Посмотрите список задач и время их следующего выполнения доступными средствами установленной версии. Сверьте часовой пояс и ограничения окружения.
- Проверьте блокировки наложения, режим обслуживания и доступность кеша. Задача может корректно пропускаться из-за действующего ограничения.
На что обратить внимание
Команда schedule:run выполняет задачи, подошедшие по времени, а не все определения сразу. Ручной запуск вне нужной минуты может создать ложное впечатление неисправности.
Как исправляют причину
Восстановите регулярный запуск и корректные условия расписания. Зависшую блокировку снимайте только после проверки, что предыдущий процесс завершился. Фиксируйте начало, успех и ошибку критичных задач.
Как убедиться, что проблема решена
Дождитесь планового времени контрольной задачи и проверьте её результат. На нескольких серверах убедитесь, что задача запускается нужное число раз согласно архитектуре.
Дождитесь реального времени задачи и проверьте конечный результат. При необходимости используйте безопасный тестовый сценарий вместо повторного запуска финансовых или массовых операций. Убедитесь, что выполнение не дублируется и после перезапуска сервисов расписание сохраняется. Пропущенные периоды восстанавливайте по согласованному плану: не каждая ежедневная задача должна автоматически выполнять все устаревшие действия за время простоя.