Агенты и cron в 1С-Битрикс - фоновые задачи сайта
Агенты и cron - подтема на 10 вопросов из собранных. Почти все они об одном: задание заведено, а ничего не происходит.
Что общего у этих задач
Агент по умолчанию запускается на хитах посетителей. Пока на сайт никто не заходит, фоновые задачи стоят, а на посещаемом сайте они выполняются в чужом запросе и удлиняют ответ. Обе крайности лечатся одним переключением - на запуск по расписанию.
Расписание запускает отдельный процесс PHP. У него своя версия языка, свои настройки и своё окружение, и совпадать с тем, что видит сайт, они не обязаны. Отсюда классика: в браузере всё работает, из расписания - нет.
Молчание - штатное поведение фоновой задачи. Вывод процесса никуда не показывается, а ошибки PHP уходят в журнал, который никто не читает. Поэтому первый шаг разбора всегда один: заставить задание писать в файл.
Фоновая задача не должна быть длинной. Всё, что идёт дольше минуты, режут на шаги с сохранением состояния: так задача переживает и перезапуск, и предел времени выполнения.
С чего начать
Начинают с проверки, включён ли запуск по расписанию и приходит ли он вовремя. Строчка в журнале запуска отвечает на этот вопрос за минуту.
Дальше сверяют окружение процесса расписания и сайта: версию языка, пределы памяти и времени, подключаемые файлы настроек. Расхождения здесь и объясняют большую часть загадок.
Последним смотрят на саму задачу. У неё должен быть журнал с началом и концом работы, защита от одновременного запуска и понятное поведение при обрыве посередине.
Решения подтемы
-
Агенты не выполняются: агенты на хитах и запуск по расписанию - переключение на расписание, проверка задания, разбор молчания.
-
Свой агент и задание по расписанию: создание, шаг, защита - строка перезапуска, скрипт с ядром, блокировка и журнал.
-
Долгая операция шагами: порции, состояние, прогресс - итератор ядра, порции, состояние, прогресс, запуск.
-
Разовый скрипт на боевом: запуск, защита, журнал, откат - запуск из консоли, сухой прогон, блокировка, снимок для отката.
-
Агенты изнутри: расписание, хиты, cron, блокировка - очередь агентов, режимы расписания, самоудаление.
Частые вопросы
Зачем переключать агентов на расписание?
Чтобы фоновые задачи не зависели от посетителей и не удлиняли их запросы. На сайте без трафика агенты на хитах просто не выполняются, а на нагруженном - выполняются в чужом запросе.
Почему задание не запускается?
Чаще всего в нём указан не тот исполняемый файл PHP или не тот путь к скрипту. Расписание не сообщает об ошибке: процесс завершается, и это всё, что видно снаружи.
Как понять, что агент вообще отработал?
По времени следующего запуска в списке агентов и по своей записи в журнал. Без записи факт выполнения снаружи не виден.
Можно ли запускать свой скрипт по расписанию?
Да, обычным заданием с подключением ядра платформы. Без подключения ядра API продукта в таком скрипте недоступно.
Связанные темы
- Сервер и поиск - устройство сервера целиком
- BitrixVM и веб-окружение - где живут задания расписания
- Отправка почты с сервера - очередь писем разбирает агент
- Раздел Инфраструктура