По умолчанию коробочный Битрикс24 запускает фоновые задачи «на хите» — то есть в момент захода пользователя на страницу. Это тормозит портал и делает выполнение агентов непредсказуемым. Правильное решение — перевести агенты и очереди на cron, чтобы тяжёлые операции шли в фоне по расписанию, а не за счёт живых посетителей.
Как работают агенты и очереди по умолчанию
В Битрикс24 есть несколько механизмов фоновой работы. Главные из них:
- Агенты — периодические функции модулей (очистка кеша, индексация, рассылки, проверки лицензии);
- Очередь отправки почты — письма копятся в таблице и рассылаются порциями;
- Модуль sender — массовые рассылки, которые дробятся на пакеты;
- Очередь задач push и фоновые команды модулей CRM, диска, поиска.
Без cron все они выполняются в режиме «hit» — их триггерит запрос пользователя. Пока агент отрабатывает, посетитель ждёт. Если агентов много или один «завис», страницы открываются медленно, а часть задач не выполняется вовсе в непиковые часы, когда на портал никто не заходит.
bitrix/admin/agent_list.php).Включение режима агентов на cron
Перевод агентов на cron состоит из двух шагов: правка конфигурации портала и добавление задания в планировщик ОС.
В файле bitrix/php_interface/dbconn.php добавьте константу:
define("BX_CRONTAB_SUPPORT", true);
Также убедитесь, что в bitrix/.settings.php или через настройки главного модуля отключён запуск агентов на хите. После этого добавьте в crontab пользователя bitrix строку запуска раз в минуту:
* * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php
Скрипт cron_events.php — точка входа, которая по очереди выполняет все агенты и обрабатывает очередь событий. В «1С-Битрикс: Веб-окружение» это задание обычно уже прописано, но константу в dbconn.php всё равно нужно включить вручную.
Очередь почты и модуль sender
Отправка писем в коробке идёт через очередь: события кладут письма в таблицу b_event, а фоновый агент разбирает её порциями. Размер порции задаётся в Настройки → Настройки продукта → Настройки модулей → Главный модуль, параметр «Максимальное количество отправляемых писем за один хит».
- Слишком маленькая порция — письма копятся и уходят с задержкой;
- слишком большая — cron-скрипт долго работает и может упереться в лимит времени.
Для массовых рассылок модуль sender использует собственную очередь и разбивает базу на пакеты. Чтобы рассылки шли стабильно в фоне, cron должен быть настроен — иначе большая рассылка «повиснет» до следующего визита администратора. Скорость регулируется в настройках sender (писем в час) с учётом лимитов вашего SMTP-релея.
Мониторинг выполнения агентов
После перевода на cron важно убедиться, что задачи реально выполняются. Способы контроля:
| Что проверяем | Где смотреть |
|---|---|
| Дата следующего запуска агента | bitrix/admin/agent_list.php, колонка «Следующий запуск» |
| Факт запуска cron | Логи планировщика ОС, вывод cron_events.php |
| Размер очереди писем | Настройки → Почта, счётчик неотправленных |
| Ошибки агентов | Журнал событий, bitrix/admin/event_log.php |
Признак проблемы — «зависший» агент, у которого дата следующего запуска в прошлом и не двигается. Обычно это значит, что предыдущий вызов упал с ошибкой и снял флаг активности. Такой агент можно перезапустить вручную из списка агентов.
Типичные проблемы и их решения
Собрали частые ситуации, с которыми сталкиваются при настройке фоновых процессов:
- Cron не запускается. Проверьте путь к php-cli (
which php) и что задание в crontab пользователя bitrix, а не root. - Агенты выполняются, но письма не уходят. Дело не в cron, а в почтовом транспорте — проверьте Postfix/SMTP и лимит писем за хит.
- Долгий агент упирается в таймаут. Увеличьте
max_execution_timeдля cli-версии PHP — она отдельна от веб-настроек. - Дубли выполнения. Два cron-задания или запуск и на хите, и по расписанию. Оставьте только один режим.
Оптимизация нагрузки от фоновых задач
Когда портал большой, сами фоновые процессы могут стать источником нагрузки. Несколько приёмов, чтобы держать её под контролем:
- разнесите тяжёлые операции (полная переиндексация поиска, чистка логов) на ночные часы отдельными cron-заданиями;
- ограничьте параллельность — не запускайте новый cron_events.php, пока не отработал предыдущий (используйте flock-блокировку);
- для крупных рассылок sender снижайте темп, чтобы не забить очередь MySQL и SMTP;
- следите за размером таблиц очередей и вовремя чистите отработанные записи.
Блокировку от наложения запусков удобно оформить так:
* * * * * /usr/bin/flock -n /tmp/bx_cron.lock /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php
Флаг -n означает «не ждать блокировку»: если прошлый запуск ещё идёт, новый просто пропустится, и вы не получите лавину параллельных процессов.
Итог
Перевод агентов и очередей коробки Битрикс24 на cron — базовая, но обязательная настройка для стабильного и быстрого портала. Она снимает фоновую работу с живых пользователей, делает выполнение задач предсказуемым и позволяет управлять нагрузкой через расписание и блокировки.
Если вы не уверены, что агенты выполняются корректно, а рассылки уходят вовремя, мы настроим cron, очереди почты и sender, добавим мониторинг фоновых процессов и защиту от наложения запусков. Это часть нашей поддержки и сопровождения коробочных порталов.
Частые вопросы
Чем режим агентов на cron лучше запуска на хите?
При запуске на хите агенты выполняются в момент захода пользователя и тормозят страницы, а в непиковые часы могут не выполняться вовсе. Cron запускает их по расписанию в фоне, независимо от посещаемости, что делает работу предсказуемой и быстрой.
Какую константу нужно добавить для включения cron?
В файл bitrix/php_interface/dbconn.php добавляется define("BX_CRONTAB_SUPPORT", true); и отключается запуск агентов на хите. После этого в crontab пользователя bitrix добавляют вызов cron_events.php раз в минуту.
От какого пользователя должен запускаться cron?
От пользователя bitrix (владельца файлов портала). Если запускать от root, файлы кеша и логов создадутся с неправильным владельцем, и портал начнёт получать ошибки доступа к файловой системе.
Почему агенты включены, а письма всё равно не уходят?
Проблема обычно не в cron, а в почтовом транспорте: неработающий Postfix или SMTP-релей, либо слишком маленький лимит писем за хит. Проверьте настройки почты и отправьте тестовое письмо из административной части.
Как избежать одновременного запуска нескольких cron-процессов?
Используйте flock-блокировку с флагом -n при вызове cron_events.php. Если предыдущий запуск ещё выполняется, новый просто пропустится, и вы не получите лавину параллельных тяжёлых процессов.
Можно ли отключить ненужные агенты?
Пользовательские агенты отключать можно, но системные — проверку обновлений, лицензии, обслуживание модулей — трогать не стоит. Их отключение ломает магазин модулей, активацию и штатное обслуживание портала.
Как понять, что cron перестал работать?
Признаки: даты следующего запуска агентов уходят в прошлое и не двигаются, копится очередь писем, не идут рассылки. Настройте мониторинг файла-метки: если он не обновлялся дольше нескольких минут, cron не отрабатывает.
Поможем с настройкой и поддержкой Битрикс24
Поможем с настройкой, доработкой и поддержкой Битрикс24.