STEADRUN

Агенты 1С-Битрикс на cron: настройка и проверка

Обновлено 02.10.2026

Агенты в 1С-Битриксе — это периодические задачи. Через них идут обмен с 1С, пересчёт цен, отправка почты, очистка корзин и рассылки модулей. По умолчанию они запускаются на хитах, то есть когда посетитель открывает сайт.

Почему агенты лучше запускать по cron

Запуск на хитах похож на WP-Cron в WordPress, и проблемы те же:

  • ночью нет посетителей — агенты и письма ждут утра;
  • долгий агент тормозит страницу — посетитель ждёт, пока выполнится обмен с 1С;
  • страницы отдаются из кэша — до PHP запрос не доходит, и агенты не запускаются.

Поэтому для рабочих сайтов агенты переводят на cron. Системный cron раз в минуту запускает скрипт, который выполняет агенты и отправляет почту.

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

Шаг 1. Отключить агенты на хитах

В административной части откройте «Настройки → Инструменты → Командная 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 уберите строки define("BX_CRONTAB_SUPPORT", true); и define("BX_CRONTAB", true);, если они есть, и добавьте в конец файла:

if (!(defined("CHK_EVENT") && CHK_EVENT === true)) {
    define("BX_CRONTAB_SUPPORT", true);
}

Шаг 3. Создать скрипт для cron

Создайте файл /bitrix/php_interface/cron_events.php:

<?php
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__) . "/../..");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];

define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
define("BX_NO_ACCELERATOR_RESET", true);
define("CHK_EVENT", true);
define("BX_WITH_ON_AFTER_EPILOG", 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("sender")) {
    \Bitrix\Sender\MailingManager::checkPeriod(false);
    \Bitrix\Sender\MailingManager::checkSend();
}

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/tools/backup.php");
CMain::FinalActions();

Шаг 4. Добавить задачу в cron

Задача должна работать от того же пользователя, от которого работает сайт. В BitrixVM это bitrix. Если запускать от root, кэш и загруженные файлы окажутся с чужим владельцем, и сайт начнёт сыпать ошибками прав.

sudo crontab -u bitrix -e
* * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php

Путь к сайту замените на свой. Узнать его можно в той же командной PHP-строке: echo $_SERVER['DOCUMENT_ROOT'];.

Как проверить, что агенты выполняются

В административной части откройте «Настройки → Настройки продукта → Агенты». У каждого агента есть время последнего и следующего запуска. Если у многих агентов время следующего запуска давно прошло, агенты не выполняются.

Проверьте и сам cron. Запущен ли он и запускает ли скрипт, описано в руководстве «Как проверить, что cron выполняется». Быстрее всего запустить скрипт вручную от пользователя сайта и посмотреть, нет ли ошибок:

sudo -u bitrix /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php

Зависший агент

Пока агент выполняется, Битрикс помечает его как запущенный. Если агент упал посреди работы, например по нехватке памяти, пометка может остаться, и агент перестанет запускаться. Найти такие агенты можно запросом к базе:

SELECT ID, NAME, LAST_EXEC, NEXT_EXEC FROM b_agent WHERE RUNNING = 'Y';

Если агент помечен как запущенный давно, а процесса с ним на сервере нет, снимите пометку:

UPDATE b_agent SET RUNNING = 'N' WHERE ID = 123;

Как узнать, что cron встал

Агенты останавливаются тихо. Обмен с 1С перестаёт идти, письма о заказах не уходят, а замечают это, когда звонит клиент. Причины разные: cron удалили при переезде, скрипт падает после обновления Битрикса, сервер сменил часовой пояс.

Чтобы узнавать сразу, добавьте в строку cron запрос к Steadrun после скрипта:

* * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php && curl -fsS -m 10 --retry 3 -o /dev/null https://steadrun.ru/ping/ВАШ-UUID

Если скрипт упадёт с ошибкой или cron перестанет его запускать, запроса не будет, и придёт алерт в Telegram или на почту. В Steadrun создайте проверку типа «Cron» с выражением * * * * *. Grace-период поставьте с запасом на самый долгий агент, например 600 секунд, иначе долгий обмен с 1С будет давать ложные алерты.

Как подключить за пять минут, описано в быстром старте. Бесплатно можно следить за пятью задачами.

Что дальше