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

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

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

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

В админке Битрикса идём в раздел Настройки / Инструменты / Командная PHP-строка. Вводим и выполняем там команду для отключения выполнение всех агентов на хитах:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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");
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");
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

Если там есть такие строки, одна или обе:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define("BX_CRONTAB_SUPPORT", true);
define("BX_CRONTAB", true);
define("BX_CRONTAB_SUPPORT", true); define("BX_CRONTAB", true);
define("BX_CRONTAB_SUPPORT", true);
define("BX_CRONTAB", true);

удаляем их. В этот же файл добавляем:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
if(!(defined("CHK_EVENT") && CHK_EVENT===true))
define("BX_CRONTAB_SUPPORT", true);
if(!(defined("CHK_EVENT") && CHK_EVENT===true)) define("BX_CRONTAB_SUPPORT", true);
if(!(defined("CHK_EVENT") && CHK_EVENT===true))
   define("BX_CRONTAB_SUPPORT", true);

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

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

Следующий шаг: в этой же папке /bitrix/php_interface/ создаём новый файл с именем cron_events.php. В него вставляем такой код:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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");
?>
<?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"); ?>
<?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 должна выглядеть так:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/opt/php72/bin/php -f /var/www/user/data/www/site.ru/bitrix/php_interface/cron_events.php
/opt/php72/bin/php -f /var/www/user/data/www/site.ru/bitrix/php_interface/cron_events.php
/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 секунд. Запоминаем время его последнего запуска. Через минуту обновляем страницу – время последнего запуска должно измениться.

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

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

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

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

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

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


    Войти с
    или как гость:
    Комментариев: 0
    Сначала новые