← К заметкам

Заметки

addBackgroundJob не запускается через cron

К обработчику сделки добавили Application::addBackgroundJob, но отложенный код не выполняется. Проверка cron ничего не объясняет: агенты работают, задача — нет.

Это два разных механизма. addBackgroundJob регистрирует callback для выполнения после отправки ответа пользователю, в рамках текущего HTTP-запроса. Он не создаёт запись агента и не передаёт работу отдельному процессу cron.

Поэтому при диагностике нужен весь путь запроса: был ли вызван addBackgroundJob, корректен ли callback, дошло ли выполнение до штатного завершения приложения. Ранний выход из самописного обработчика или авария PHP могут оставить callback невыполненным. Строка в журнале cron к этому пути не относится.

Механизм удобен для работы, которую хочется убрать из времени ожидания браузера. Однако требование «обязательно отправить заказ, даже если PHP-процесс упадёт» он не закрывает. Для такой операции нужно сохранять задание и состояние обработки в постоянном хранилище, а затем выполнять его агентом или отдельным обработчиком очереди.

Если нужна именно периодическая работа, начните с агента модуля. Если callback уже зарегистрирован, ищите причину в текущем запросе, а не переносите его на cron вслепую.

Документация: Агенты и фоновые задачи.