Запуск агентов 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 и выполняются ли агенты.

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам