Как перевести агенты 1С-Битрикс на cron: почта, каталог и фоновые задачи

Как перевести агенты 1С-Битрикс на cron: почта, каталог и фоновые задачи

Реклама пошла, а первый утренний посетитель ждёт страницу 8 секунд: в профайлере висит CAgent::CheckAgents. Почта с ночной выгрузки не ушла - после полуночи не было ни одного хита. По запросу "агенты битрикс cron" половина статей ведёт в Bitrix24. Ниже - как перевести фоновые задачи CMS "1С-Битрикс: Управление сайтом" на cron: проверить очередь, выбрать режим, настроить cron_events.php и crontab.

Агенты CMS - внутренние "будильники" Битрикс: по расписанию шлют почту, обновляют поиск, гоняют обмен. По умолчанию стартуют при каждом заходе на сайт. Перенос на cron убирает задержки с фронта и работает ночью без посетителей. Официально два режима: полный (все агенты только cron) и частичный (периодические на cron). Одной строки в crontab без отключения хитов мало.

Bitrix24 - облачная CRM, не наш продукт. Статья про коробочную CMS на хостинге или VMBitrix. Типичная история: подрядчик добавил в crontab root-ом строку с cron_events.php, но не отключил агенты на хитах и не прописал BX_CRONTAB_SUPPORT. В админке "всё зелёное", а 47 агентов копятся - первый дневной хит снова тянет реиндекс поиска.

Cron - таймер Linux, который запускает PHP-скрипт каждую минуту, даже когда сайт никто не открывает. Агент (CAgent) - PHP-задача в таблице b_agent: у неё есть LAST_EXEC (когда последний раз отработал) и NEXT_EXEC (когда ждёт следующий запуск). CAgent::CheckAgents - метод ядра, который в начале каждой страницы смотрит очередь; при большом хвосте он и даёт скачки TTFB.

Поймите, почему агенты на хитах тормозят сайт и ломают почту

Сравнение агентов на хитах и cron: TTFB, почта, ночные задачи

На каждом обращении ядро вызывает CAgent::CheckAgents. Накопились реиндекс, выгрузка каталога, письма - первый дневной посетитель ждёт 3-8 секунд. Официальный порог "тяжёлого" агента - больше 10 секунд. Ночью без хитов b_event и обмен могут не стартовать: форма показывает "отправлено", письмо ждёт утра. На практике после переноса на cron p99 времени ответа часто падает с 8+ секунд до менее секунды, потому что CheckAgents уходит с фронта.

Режим Когда срабатывает Плюсы Минусы
На хитах При каждом заходе Не нужен cron Скачки скорости, ночная пауза
Через cron По расписанию сервера Стабильный TTFB, работа без трафика Нужен crontab

Делайте: переводите магазины и каталоги на cron до рекламы. Не делайте: не путайте CAgent CMS с AI-агентами облачной CRM. Если очередь больше 40 агентов - напишите нам, разберём профайлер до переноса.

Проверьте очередь агентов в админке и "Проверке системы"

Чеклист проверки очереди агентов в админке Битрикс и Проверке системы

Откройте /bitrix/admin/agent_list.php. Смотрите LAST_EXEC, NEXT_EXEC и периодичность. NEXT_EXEC в прошлом без обновления LAST_EXEC - агенты на хитах или cron не работает. "Проверка системы" (/bitrix/admin/site_checker.php) покажет режим cron. Для почты сверьте b_event - разбор в гайде по настройке почты.

  1. Отсортируйте agent_list по NEXT_EXEC - просроченные сверху.
  2. Отметьте агенты search, mail, catalog - они чаще дают лаги.
  3. Запустите site_checker, найдите блок про агенты.
  4. Типичная ошибка: crontab есть, а LAST_EXEC не меняется - хиты не отключены.
  5. Подождите 2-3 интервала cron без открытия сайта и обновите список.

Делайте: скрин agent_list до и после. Не делайте: не удаляйте агенты модулей без бэкапа.

Выберите режим переноса: полный или только периодические

Workflow выбора режима переноса агентов: полный или только периодические

Режим A - все агенты только cron: agents_use_crontab=N, check_agents=N, свой /bitrix/php_interface/cron_events.php. Режим B - периодические на cron (agents_use_crontab=Y), штатный /bitrix/modules/main/tools/cron_events.php; непериодические остаются на хитах.

Параметр Режим A: полный Режим B: частичный
agents_use_crontab N Y
check_agents на хитах Отключено Частично
Файл запуска php_interface/cron_events.php modules/main/tools/cron_events.php
Когда брать Магазин, каталог, почта Лёгкий сайт
Итоговый вердикт: для бизнес-сайта с формами берите режим A. Режим B - если очередь маленькая. Модуль "Агенты на кроне" упрощает переключение на shared, но не заменяет CEvent в cron_events.php. Перед обновлением ядра сохраните dbconn.php и cron_events.php.

Настройте dbconn.php и cron_events.php

В dbconn.php добавьте BX_CRONTAB_SUPPORT. Для режима A создайте cron_events.php по официальному уроку:

<?php
$_SERVER['DOCUMENT_ROOT'] = realpath(dirname(__FILE__). '/../..');
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
define('BX_CRONTAB', true);
require($_SERVER['DOCUMENT_ROOT']. '/bitrix/modules/main/include/prolog_before.php');
set_time_limit(0);
@ignore_user_abort(true);
CAgent::CheckAgents;
CEvent::CheckEvents;
define('BX_CRONTAB_SUPPORT', true);
COption::SetOptionString('main', 'mail_event_bulk', '50');
require($_SERVER['DOCUMENT_ROOT']. '/bitrix/modules/main/include/epilog_after.php');

mail_event_bulk (сколько писем отправить за один проход) поднимите до 20-100 при большой очереди b_event - иначе письма снова "висят" до хита. set_time_limit(0) обязателен: без него PHP обрежет длинный агент на 30 секундах. Если в dbconn.php стоит CACHED_b_event=false для отладки почты - не забудьте вернуть кэш после теста. На тяжёлых проектах в конец файла добавляют вызов backup.php (связка с автоматическим бэкапом) или модуль Sender для рассылок.

Делайте: для режима B указывайте штатный tools/cron_events.php. Не делайте: не запускайте два cron параллельно - второй старт заблокируется, пока первый не завершится.

Пропишите crontab на BitrixVM и shared-хостинге

Cron от пользователя bitrix, не root - иначе ломаются права на /upload. На VMBitrix: меню pool 8→3, /etc/cron.d/bx_* или /bitrix/crontab/crontab.cfg.

*/1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php

Для режима B путь к tools/cron_events.php. */1 - стандарт для почты и каталога; */5 допустим на слабом тарифе, но ночная почта может запаздывать. На shared строку добавляют в панели - у Beget раздел "Cron" с командой php -f и полным путём к файлу.

Если BitrixEnv уже прописал задачу в /etc/cron.d/bx_dbName, не дублируйте - закомментируйте лишнее после проверки agent_list. Часто ломается связка CLI PHP и FPM: версии или расширения не совпадают, агент падает только из cron, а на хитах "работает". Проверка: sudo -u bitrix crontab -l и хвост /var/log/cron после ожидания одного интервала.

Делайте: смотрите NEXT_EXEC без открытия сайта. Не делайте: интервал cron не короче времени тяжёлого агента.

Пройдите чек-лист после настройки

  1. site_checker: "агенты через cron".
  2. agent_list: LAST_EXEC обновляется без визитов 10-15 минут.
  3. Тестовое письмо уходит за 1-2 минуты.
  4. Нет RUNNING=Y дольше интервала cron в b_agent.
  5. Профайлер без CheckAgents с ненулевым временем.
  6. Регламент - в поддержке сайта на Битрикс.
  7. Сверьте NEXT_EXEC у search/mail-агентов - они первыми сигналят о сбое cron.

Если после рекламы снова растёт очередь - модуль добавил новых агентов или cron отвалился после обновления ядра. Раз в месяц сверяйте agent_list с регламентом поддержки: просроченные NEXT_EXEC - сигнал, что cron или права на сервере сломались.

Примеры после переноса - в портфолио. Сложный каталог или обмен 1С - обсудим задачу.

Автор: Максим Мольков, разработчик 1С-Битрикс.
Источники: dev.1c-bitrix.ru LESSON_ID=2943..

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

Как перевести агенты на cron в CMS Битрикс?

Выберите режим A или B. Пропишите BX_CRONTAB_SUPPORT, настройте cron_events.php, отключите check_agents на хитах, добавьте crontab каждую 1-5 минут от пользователя bitrix. Проверьте agent_list без визитов на сайт.

Каждые сколько минут запускать cron_events.php?

Для почты и каталога - */1. На shared допустимо */5, но письма могут ждать дольше. Интервал не должен быть меньше времени самого долгого агента.

Почему агенты не выполняются при наличии crontab?

Cron от root, не отключены хиты, нет BX_CRONTAB_SUPPORT, неверный путь к php, предыдущий cron ещё работает. Сверьте site_checker и LAST_EXEC.

Чем агент отличается от cron?

Агент - задача в b_agent с расписанием NEXT_EXEC. Cron запускает cron_events.php, тот вызывает CheckAgents и CheckEvents. Без cron на сайте с малым трафиком задачи ждут первого хита.

Нужен ли свой cron_events.php?

При режиме B хватит штатного tools/cron_events.php. При полном переносе нужен свой файл в php_interface с set_time_limit(0), CheckAgents и CheckEvents.

Можно ли на shared без SSH?

Да, через панель cron хостера: php -f с полным путём. dbconn.php правят через FTP. Модуль "Агенты на кроне" упрощает переключение, но опции main стоит понимать.

Как проверить, что CheckAgents больше не тормозит страницы?

Включите профайлер в настройках или сравните время ответа до и после переноса. CheckAgents на хитах не должен занимать секунды. NEXT_EXEC в agent_list обновляется от cron, а не только когда вы сами открываете сайт.

Читайте также

Интеграции с 1С и API
949 6 мин.

Как настроить регистрацию и личный кабинет покупателя на 1С-Битрикс?

Пошаговая настройка регистрации на сайте битрикс: Главный модуль, main.register, system.auth.form и sale.personal.section с историей заказов и 152-ФЗ.
Интеграции с 1С и API
679 15 мин.

Что такое компонент в Битриксе и как он работает

Каждый разработчик, впервые столкнувшийся с Битриксом, проходит через своеобразный обряд посвящения. Вначале кажется, что это просто CMS, где можно поправить HTML в визуальном редакторе или дописать пару строк CSS. Но однажды наступает момент, когда нужно изменить логику вывода новостей, отфильтровать товары по хитрому свойству или добавить на страницу нечто совершенно новое. И тут он впервые слышит это слово — «компонент». Для многих этот момент становится стеной. Система, казавшаяся понятной, вдруг превращается в черный ящик, полный непонятных файлов и странных переменных. Но стоит лишь раз заглянуть под капот, как эта стена рассыпается, превращаясь в набор удивительно логичных и мощных строительных блоков. Понимание компонентов — это тот самый щелчок, после которого разработка на Битрикс из мучения превращается в творчество.

Эта статья — ваш проводник в мир компонентов «1С-Битрикс». Мы не будем сыпать сухими терминами из документации. Вместо этого мы совершим путешествие: от философии, заложенной в эту архитектуру, до мельчайших деталей её работы. Мы разберем компонент на атомы — его файлы, логику, шаблон, параметры — и соберем обратно, чтобы вы не просто знали, что это, но и глубоко понимали, почему это работает именно так. Это знание — ключ к эффективной и профессиональной разработке на Битрикс.

Интеграции с 1С и API
606 2 мин.

Установка Composer в 1С-Битрикс

Установка Composer в проекте на 1С-Битрикс требует учета особенностей платформы, чтобы обеспечить корректную работу и интеграцию с системой.