Запуск агентов CMS Bitrix из cron
Пошаговое руководство по переводу агентов 1С-Битрикс на cron.
Агенты в 1С-Битрикс — это встроенный механизм для автоматизации регулярных задач: отправка почты, индексация поиска, очистка кэша, обработка событий и многое другое.
По умолчанию агенты выполняются на хите (при каждом обращении пользователя к сайту). Это удобно для небольших проектов, но при высокой нагрузке или большом количестве агентов сильно тормозит сайт и увеличивает нагрузку на сервер.
Перевод агентов на cron — рекомендуемый способ для всех проектов на виртуальном хостинге, VPS и выделенных серверах. Это разгружает сайт и гарантирует стабильное выполнение задач по расписанию.
Шаг 1: Отключите выполнение агентов на хите
Подключитесь к серверу по SSH и выполните в PHP-консоли (или в /bitrix/.settings.php):
COption::SetOptionString("main", "agents_use_crontab", "N");
echo COption::GetOptionString("main", "agents_use_crontab", "N");
COption::SetOptionString("main", "check_agents", "N");
echo COption::GetOptionString("main", "check_agents", "Y");
Ожидаемый вывод: NN
Шаг 2: Отредактируйте dbconn.php
Откройте файл /bitrix/php_interface/dbconn.php:
nano /bitrix/php_interface/dbconn.php
Удалите (или закомментируйте) строки:
define("BX_CRONTAB_SUPPORT", true);
define("BX_CRONTAB", true);
Добавьте вместо них:
if (!(defined("CHK_EVENT") && CHK_EVENT === true)) {
define("BX_CRONTAB_SUPPORT", true);
}
Сохраните файл (Ctrl+O → Enter → Ctrl+X).
Шаг 3: Создайте файл для cron
Создайте файл /bitrix/php_interface/cron_events.php:
nano /bitrix/php_interface/cron_events.php
Вставьте следующий код:
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__) . "/../..");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
define("CHK_EVENT", true);
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
@set_time_limit(0);
@ignore_user_abort(true);
CAgent::CheckAgents();
define("BX_CRONTAB_SUPPORT", true);
define("BX_CRONTAB", true);
CEvent::CheckEvents();
if (CModule::IncludeModule("subscribe")) {
$cPosting = new CPosting;
$cPosting->AutoSend();
}
Сохраните файл (Ctrl+O → Enter → Ctrl+X).
Шаг 4: Добавьте задачу в cron
Откройте crontab:
crontab -e
Добавьте строку (запуск каждые 5 минут):
*/5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
(Замените /home/bitrix/www/ на реальный путь к вашему сайту.)
Сохраните и выйдите.
Шаг 5: Настройте отправку почты (опционально)
Чтобы ускорить обработку почтовых событий, увеличьте количество сообщений за один запуск (рекомендуется 20–50):
COption::SetOptionString("main", "mail_event_bulk", "20");
echo COption::GetOptionString("main", "mail_event_bulk", "5");
Полезные замечания
- Если очередной запуск cron происходит до завершения предыдущего — агенты не дублируются (они блокируются на время выполнения).
- Для проектов с большим количеством почты настройте
mail_event_bulkвыше (например, 100), а cron чаще (каждые 1–2 минуты). - Проверяйте логи:
/bitrix/.logs/илиcron.log— там видно, запускается ли cron и выполняются ли агенты.
Помощь
Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!