База знаний · 1С-Битрикс
Настройка cron для агентов и обменов
Как перевести агенты, почту и фоновые части обмена с 1С на запуск по расписанию вместо выполнения «на хитах».
В 1С-Битрикс регламентные фоновые задачи — агенты, отправка отложенной почты, служебные операции модулей и части обмена с 1С — по умолчанию запускаются «на хитах», то есть при заходах посетителей на сайт. Это работает, но ненадёжно: при низком трафике задачи откладываются, а на «невезучих» запросах пользователей повисает лишняя нагрузка. Перевод фоновых задач на cron делает их выполнение предсказуемым по расписанию и разгружает обычные запросы. Ниже — как это правильно настроить.
Зачем переводить агенты и обмены на cron
- Предсказуемость. Задачи выполняются строго по расписанию, а не «когда зайдёт посетитель».
- Скорость сайта. Фоновая работа снимается с обычных хитов — страницы отдаются быстрее.
- Надёжность почты. Очередь писем разбирается вовремя, даже ночью при нулевом трафике.
- Стабильный обмен. Служебные агенты обмена с 1С отрабатывают регулярно, не завися от посещаемости.
Настройку и обслуживание фоновых задач берёт на себя администрирование 1С-Битрикс, а корректность самих обменов — поддержка обмена с 1С (товары, заказы, остатки, цены).
Что понадобится
- Доступ по SSH к серверу и права на редактирование crontab (обычно от пользователя, под которым работает сайт).
- Путь к исполняемому PHP CLI (например,
/usr/bin/php). - Абсолютный путь к скрипту агентов
/bitrix/modules/main/tools/cron_events.php. - Права администратора в админке — чтобы поменять режим запуска агентов.
Шаг 1. Включаем поддержку cron в dbconn.php
Откройте файл /bitrix/php_interface/dbconn.php и добавьте константу, которая разрешает запуск агентов из командной строки:
- Определите
define("BX_CRONTAB_SUPPORT", true); - При запуске из cron платформа сама выставляет служебный признак
BX_CRONTAB, поэтому агенты понимают, что их вызвали по расписанию, а не на хите.
Шаг 2. Отключаем выполнение агентов «на хитах»
- Зайдите в админку: Настройки → Настройки продукта → Настройки модулей → Главный модуль.
- Найдите блок настроек агентов и снимите режим «Проверять активность агентов и отправку почты на хитах».
- Включите режим запуска агентов на cron.
- Сохраните изменения.
После этого система перестанет нагружать посетителей фоновыми задачами и будет ждать запуска по расписанию — который мы настроим на следующем шаге.
Шаг 3. Добавляем задание в crontab
Отредактируйте crontab пользователя сайта (crontab -e) и добавьте задание, которое раз в минуту запускает агентский скрипт:
| Часть задания | Что означает |
|---|---|
* * * * * | Расписание — каждую минуту. |
/usr/bin/php | Путь к интерпретатору PHP CLI (уточните на своём сервере). |
-f /путь/к/сайту/bitrix/modules/main/tools/cron_events.php | Скрипт, который выполняет «просроченные» агенты и очередь почты. |
Строка целиком выглядит примерно так: * * * * * /usr/bin/php -f /home/site/public_html/bitrix/modules/main/tools/cron_events.php. Пути обязательно указывайте абсолютными.
crontab -e.Обмен с 1С и тяжёлые регламентные задачи
Минутный запуск cron_events.php закрывает почту и лёгкие агенты. Тяжёлые операции лучше выносить в отдельные задания crontab, чтобы они не растягивали минутный цикл:
- Полный обмен с 1С и переиндексацию поиска ставят отдельными заданиями с более редким расписанием (например, ночью).
- Инициатором обмена часто выступает сама 1С по своему расписанию, а Битрикс обрабатывает очередь служебными агентами — держите их на cron, чтобы заказы, остатки и цены синхронизировались вовремя.
- Если обмен «застревает» или дублирует данные, разобраться поможет поддержка обмена с 1С.
Как проверить, что cron работает
- В админке в списке агентов посмотрите время последнего и следующего запуска — оно должно обновляться по расписанию.
- Отправьте тестовое письмо (или инициируйте событие с почтой) и убедитесь, что оно уходит без ожидания посетителя.
- Проверьте лог cron на сервере — задание должно исполняться каждую минуту без ошибок.
- Убедитесь, что скрипт запускается именно через PHP CLI, а не как веб-запрос.
Частые ошибки
- Не включена константа поддержки cron. Забыли
BX_CRONTAB_SUPPORTвdbconn.php— агенты продолжают работать «на хитах». - Неверный путь к PHP или скрипту. Задание в crontab не запускается; проверьте абсолютные пути и наличие php-cli.
- Задание от чужого пользователя. Нет прав на файлы сайта — ошибки записи в кеш и логи.
- Режим «на хитах» не отключён в админке. Настроили crontab, но забыли переключить режим агентов — эффект неполный.
- Тяжёлый обмен в минутном задании. Долгая операция перекрывает следующий запуск — выносите её в отдельное расписание.
Итог
Перевод агентов и фоновых частей обмена на cron — три связанных действия: включить BX_CRONTAB_SUPPORT в dbconn.php, отключить режим «на хитах» в настройках главного модуля и добавить в crontab минутный запуск cron_events.php. Тяжёлые задачи выносятся отдельными заданиями. В результате почта и служебные агенты работают по расписанию, сайт не тратит ресурсы посетителей на фоновую работу, а обмен с 1С идёт стабильно. Настройку и последующий контроль удобно передать на техническую поддержку 1С-Битрикс.
Частые вопросы
Чем выполнение агентов на cron лучше режима «на хитах»?
По умолчанию агенты и очередь почты запускаются «на хитах» — то есть при заходах посетителей на сайт. Это ненадёжно: если трафика мало, задачи выполняются с задержкой, а на посетителях, которым «не повезло», подвешивается лишняя нагрузка. Перевод на cron делает выполнение предсказуемым по расписанию и снимает фоновую работу с обычных запросов пользователей, что ускоряет сайт.
Какой интервал ставить в crontab?
Стандартная рекомендация — запускать агентский скрипт раз в минуту. Этого достаточно для отправки почты, служебных агентов и большинства регламентных задач. Тяжёлые операции (например, полный обмен с 1С или переиндексация) обычно выносят в отдельные задания crontab со своим расписанием, чтобы они не мешали минутному циклу агентов.
Нужно ли что-то менять в самом Битриксе, кроме crontab?
Да. В файле /bitrix/php_interface/dbconn.php задаётся константа BX_CRONTAB_SUPPORT (включение поддержки cron), а в настройках главного модуля выключается режим «Агенты и события на хитах» и включается запуск агентов на cron. Без этого система продолжит пытаться выполнять агенты на хитах, и настройка crontab не даст полного эффекта.
Как обмен с 1С связан с cron?
Обмен с 1С может инициироваться как со стороны 1С (по расписанию в самой 1С), так и служебными агентами Битрикса — например, отложенной загрузкой, обработкой очереди заказов и служебными задачами модуля торгового каталога. Когда агенты переведены на cron, эти фоновые части обмена тоже выполняются стабильно по расписанию, а не зависят от трафика на сайте.
Почему после настройки cron письма всё равно уходят с задержкой?
Чаще всего задание в crontab не запускается: неверный путь к PHP или к скрипту, у пользователя cron нет прав на файлы сайта, либо в dbconn.php не включена константа поддержки cron. Проверьте, что задание реально исполняется (лог cron, время последнего запуска агентов в админке), и что путь к php-cli и к cron_events.php указан абсолютным и корректным.