Как перенести агенты 1С-Битрикс на cron

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

Перенос агентов битрикс на крон

Для начала необходимо отключить выполнение агентов через хиты пользователей. Для этого в файле /bitrix/php_interface/dbconn.php задается параметр:

define("NO_AGENT_CHECK", true);

Это предотвратит запуск агента во время обработки посещений страниц вашего сайта.

Далее настроим запуск агентов через cron. Нужно создать скрипт, который будет запускаться по расписанию:

<?php
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/..");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS',true);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

set_time_limit(0);

while(ob_get_level()){
    ob_end_flush();
}

CModule::IncludeModule('main');

CAgent::CheckAgents();

define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/agents.log");
AddMessage2Log("Агенты проверены", "main");

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
?>

Убедившись, что скрипт работает корректно при его вызове из командной строки, добавим его в cron (для этого использовать crontab -e):

*/5 * * * * php /path_to_your_project/cron/cron_events.php

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

Заключение

После переноса выполнения агентов на cron нагрузка на сервер снизится, а все задачи будут выполняться точно по расписанию. Настройка несложная и требует минимального времени, но при этом значительно повышает производительность сайта на 1С-Битрикс.