В Битрикс по умолчанию агенты выполняются на хитах. То есть триггером для запуска агента является посещение сайта пользователем. Из-за этого сайт может работать медленнее, чем хотелось бы. К тому же при проверке системы в админке, мы постоянно будем видеть «Замечание. Агенты выполняются на хитах, рекомендуется перевести выполнение агентов на cron».

Выполнение всех агентов на cron

Ещё может быть другая ошибка: «Ошибка! Не настроен запуск cron_events. php на cron, последний агент отработал больше суток назад»

Как в Битрикс быстро и правильно перевести выполнение всех агентов на cron.

В админке Битрикса идём в раздел Настройки / Инструменты / Командная 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». Выглядит это так:

Выполнение всех агентов на cron

Дальше нужно отредактировать файл /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);

Должно получиться примерно вот так:

Выполнение всех агентов на 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");
?>

Ну и последнее, добавляем наш файл cron_events.php в планировщик cron с временем выполнения каждую минуту. Команда для планировщика cron должна выглядеть так:

/opt/php72/bin/php -f /var/www/user/data/www/site.ru/bitrix/php_interface/cron_events.php

Где:

  • /opt/php72/bin/php — путь к бинарнику той версии php, на которой работает сайт. Если версия php на сервере одна, и она установлена из пакетов, можно написать просто php.
  • /var/www/user/data/www/site.ru/bitrix/php_interface/cron_events.php — полный путь к созданному нами файлу cron_events.php от корня сервера.

Через пару минут идём в админку Битрикса в раздел Инструменты / Проверка системы, запускаем проверку, и видим, что «Замечание. Агенты выполняются на хитах, рекомендуется перевести выполнение агентов на cron» исчезло. Это значит, что всё хорошо, мы успешно перевели выполнение всех агентов на cron.

Выполнение всех агентов на cron

Проверить, как выполняются Агенты можно в админке Битрикс в разделе Настройки / Настройки продукта / Агенты.

Ищем там Агента с интервалом выполнения 60 секунд. Запоминаем время его последнего запуска. Через минуту обновляем страницу — время последнего запуска должно измениться.

Нужна профессиональная удалённая помощь с сервером, сайтом, компьютером или ноутбуком?

Свяжитесь со мной любым удобным для вас способом, и получите её быстро и не дорого.

Обсудить задачу

Помогла статья? Поблагодари автора!

Остались вопросы, или есть что добавить? Добро пожаловать в комментарии.

Угостить автора чашечкой кофе