Настройка кронтабов и агентов 1С-Битрикс
Настройка кронтабов и агентов 1С-Битрикс
Агенты Битрикса и cron-задачи — два механизма периодического выполнения задач. Путаница между ними и неправильная настройка — источник нескольких классических проблем: письма о заказах уходят с задержкой в час, выгрузка в 1С запускается только при заходе пользователя на сайт, планировщик «забывает» обновить курс валют в выходной день. Разобраться в разнице и настроить правильно — задача не сложная, но требующая понимания архитектуры.
Агенты Битрикса: как они работают
Агенты в 1С-Битрикс — это PHP-функции, зарегистрированные в модуле main через CAgent::AddAgent(). Их список хранится в таблице b_agent. При каждом хите (запросе к сайту) Битрикс проверяет: есть ли агенты, время выполнения которых уже наступило. Если да — выполняет их синхронно в рамках текущего запроса.
Это ключевой момент: агенты выполняются только при наличии входящих запросов. Если ночью никто не заходит на сайт — агенты, запланированные на ночь, не выполнятся. Для сайтов с низким ночным трафиком это проблема: обновление индексов поиска, отправка email-рассылок, синхронизация с внешними системами — всё это может не происходить по расписанию.
Структура таблицы b_agent:
-
NAME— имя функции-агента (например,CSaleOrder::CheckOrderEmail()) -
MODULE_ID— модуль -
PERIOD— интервал запуска в секундах -
NEXT_EXEC— следующее время запуска -
ACTIVE— включён/выключен
Cron в связке с Битриксом
Cron — системный планировщик задач Linux. Для Битрикса cron используется двумя способами:
1. Принудительный запуск агентов через cron. Скрипт /bitrix/modules/main/tools/cron_events.php запускается по расписанию и инициирует выполнение агентов принудительно — независимо от трафика. Стандартная настройка:
* * * * * /usr/bin/php /path/to/site/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1
Это запускает агенты каждую минуту через cron, а не только при хитах.
2. Самостоятельные cron-скрипты. Отдельные PHP-скрипты, запускаемые по расписанию без участия системы агентов. Например, выгрузка в 1С, генерация sitemap, очистка временных файлов. Скрипт подключает ядро Битрикса (require $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php") и выполняет нужные операции.
Настройка агентов: что проверить
Активность агентов. В /bitrix/admin/agent_list.php — список всех зарегистрированных агентов. Для каждого: когда последний раз выполнялся, когда должен выполниться следующий раз. Если NEXT_EXEC в далёком прошлом — агент застрял.
Время выполнения. Если агент выполняется дольше, чем позволяет max_execution_time PHP, он прерывается и может не завершиться корректно. Тяжёлые агенты (например, переиндексация поиска) нужно либо переводить на cron, либо разбивать на порции.
Зависание агента. Иногда агент завис и заблокировал выполнение следующих. В b_agent смотрим: есть ли агент с IS_PERIOD = Y, у которого NEXT_EXEC не обновляется часами. Это признак зависшего агента. Решение: сбросить NEXT_EXEC на текущее время через SQL или через панель администратора.
Типичная конфигурация crontab для Битрикс-сайта
# Принудительный запуск агентов Битрикса каждую минуту
* * * * * /usr/bin/php /var/www/site/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1
# Очистка старых файлов сессий (каждый час)
0 * * * * find /tmp/php_sessions/ -maxdepth 1 -type f -mmin +1440 -delete
# Генерация sitemap (каждую ночь в 2:00)
0 2 * * * /usr/bin/php /var/www/site/local/scripts/generate_sitemap.php >> /var/log/sitemap.log 2>&1
# Резервное копирование БД (каждую ночь в 3:00)
0 3 * * * /usr/bin/mysqldump -u bitrix -p'password' bitrix_db | gzip > /backup/db_$(date +\%Y\%m\%d).sql.gz
Кейс: письма об оплате приходили с опозданием
Клиент — интернет-магазин, 50–80 заказов в день. Жалоба: письмо «заказ оплачен» приходит клиенту через 30–60 минут после реальной оплаты. Иногда — через несколько часов.
Диагностика: агент CSaleOrder::CheckOrderEmail() запускался только при хитах. Между 2:00 и 8:00 трафик минимальный — агент не работал. Письма накапливались в очереди и уходили только утром, когда начинался трафик.
Решение: настройка cron для принудительного запуска агентов каждую минуту. Дополнительно: агент уведомлений перенесён в режим «cron» (см. статью о переводе агентов на cron) — он больше не зависит от хитов вообще.
Результат: письма стали приходить в течение 1–2 минут после оплаты.
Сроки
Настройка cron и аудит агентов — 4–8 часов. Включает: аудит текущих агентов, настройку crontab для принудительного запуска, проверку зависших агентов, тестирование. Для сложных конфигураций с кастомными cron-скриптами — 1–3 рабочих дня.
Агент в 1С-Битрикс — это функция PHP, которая должна выполняться по расписанию. Когда агенты работают «на хитах» (то есть запускаются при каждом HTTP-запросе), на проекте с низким трафиком задачи могут не выполняться часами. Почему? Потому что агент на хите ждёт следующего посетителя. Ночью никто не заходит — рассылка не отправляется, индекс поиска не обновляется, остатки не синхронизируются.
Как работают агенты в Битриксе
Агенты хранятся в таблице b_agent. Каждая запись содержит: имя функции-агента, период запуска (PERIOD), дату следующего запуска (NEXT_EXEC), флаг активности.
Два режима работы:
Режим «на хитах». При каждом HTTP-запросе Битрикс проверяет таблицу b_agent — есть ли агенты, у которых NEXT_EXEC <= NOW(). Если есть — запускает в рамках текущего HTTP-запроса. Плюс: работает без настройки сервера. Минус: нет гарантии времени выполнения, увеличивает время ответа страницы, на низкотрафиковых сайтах агенты выполняются с большими задержками.
Режим «через cron». Агенты запускаются через системный cron независимо от HTTP-трафика. Скрипт /bitrix/modules/main/tools/agent_exec.php вызывается кронтабом, проверяет b_agent и запускает просроченные агенты. Это правильный способ для любого продакшн-проекта.
Настройка cron для агентов
Стандартная запись в crontab для запуска агентов каждую минуту:
* * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/agent_exec.php > /dev/null 2>&1
Дополнительно — для гарантии выполнения агентов, завязанных на точное время (например, отложенная отправка email):
*/5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/event_exec.php > /dev/null 2>&1
event_exec.php — обработчик очереди почтовых событий. Без него отправка email из очереди зависит от хитов.
В настройках Битрикса нужно переключить режим: «Настройки → Настройки модулей → Главный модуль → Использовать cron для агентов» — включить. После этого агенты перестают запускаться на хитах.
Кастомные cron-задачи
Помимо агентов Битрикса, на продакшн-сервере часто нужны собственные cron-задачи:
Очистка кеша по расписанию. Если кеш не инвалидируется автоматически:
0 4 * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/clear_cache.php > /dev/null 2>&1
Импорт из 1С. Если обмен не через push, а по расписанию — скрипт запуска CommerceML-импорта:
0 */2 * * * /usr/bin/php -f /home/bitrix/www/local/php_interface/import_1c.php >> /var/log/bitrix_import.log 2>&1
Переиндексация поиска.
0 2 * * 0 /usr/bin/php -f /home/bitrix/www/bitrix/modules/search/tools/index.php > /dev/null 2>&1
Мониторинг агентов
Для проверки состояния агентов:
SELECT NAME, NEXT_EXEC, PERIOD, ACTIVE
FROM b_agent
WHERE ACTIVE = 'Y'
ORDER BY NEXT_EXEC ASC;
Агенты с NEXT_EXEC в прошлом на несколько часов — признак того, что cron не работает или агент упал с ошибкой. Ошибки агентов пишутся в лог: «Настройки → Журнал событий» (тип события AGENT).
Сроки
Настройка cron для агентов и базовых задач — 2–4 часа: диагностика текущего режима, настройка crontab, переключение режима в Битриксе, проверка выполнения. Для сложных cron-сценариев с мониторингом — 1–2 рабочих дня.







