Перейти к содержимому

Агенты и cron в 1С-Битрикс - фоновые задачи сайта

Агенты и cron - подтема на 10 вопросов из собранных. Почти все они об одном: задание заведено, а ничего не происходит.

Что общего у этих задач

Агент по умолчанию запускается на хитах посетителей. Пока на сайт никто не заходит, фоновые задачи стоят, а на посещаемом сайте они выполняются в чужом запросе и удлиняют ответ. Обе крайности лечатся одним переключением - на запуск по расписанию.

Расписание запускает отдельный процесс PHP. У него своя версия языка, свои настройки и своё окружение, и совпадать с тем, что видит сайт, они не обязаны. Отсюда классика: в браузере всё работает, из расписания - нет.

Молчание - штатное поведение фоновой задачи. Вывод процесса никуда не показывается, а ошибки PHP уходят в журнал, который никто не читает. Поэтому первый шаг разбора всегда один: заставить задание писать в файл.

Фоновая задача не должна быть длинной. Всё, что идёт дольше минуты, режут на шаги с сохранением состояния: так задача переживает и перезапуск, и предел времени выполнения.

С чего начать

Начинают с проверки, включён ли запуск по расписанию и приходит ли он вовремя. Строчка в журнале запуска отвечает на этот вопрос за минуту.

Дальше сверяют окружение процесса расписания и сайта: версию языка, пределы памяти и времени, подключаемые файлы настроек. Расхождения здесь и объясняют большую часть загадок.

Последним смотрят на саму задачу. У неё должен быть журнал с началом и концом работы, защита от одновременного запуска и понятное поведение при обрыве посередине.

Решения подтемы

Частые вопросы

Зачем переключать агентов на расписание?

Чтобы фоновые задачи не зависели от посетителей и не удлиняли их запросы. На сайте без трафика агенты на хитах просто не выполняются, а на нагруженном - выполняются в чужом запросе.

Почему задание не запускается?

Чаще всего в нём указан не тот исполняемый файл PHP или не тот путь к скрипту. Расписание не сообщает об ошибке: процесс завершается, и это всё, что видно снаружи.

Как понять, что агент вообще отработал?

По времени следующего запуска в списке агентов и по своей записи в журнал. Без записи факт выполнения снаружи не виден.

Можно ли запускать свой скрипт по расписанию?

Да, обычным заданием с подключением ядра платформы. Без подключения ядра API продукта в таком скрипте недоступно.

Связанные темы

Первоисточники