Настройка кронтабов и агентов 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка кронтабов и агентов 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка кронтабов и агентов 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 рабочих дня.