Записки

Выполнение всех агентов на cron Битрикс 01.04.2018

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

По умолчанию все агенты в Битриксе выполняются на хитах. Для ускорения работы сайта в целом необходимо выполнение агентов переложить на cron.
И так к делу, заходим в командную PHP-строку в административной части сайта:

Настройки / Инструменты / Командная 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 Битрикс

Создаем файл с именем "cron_events.php" для проверки агентов и рассылки системных сообщений в папке:

bitrix / php_interface /

Со следующим кодом:

<?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 Битрикс

Вот далее самое сложное. Необходимо добавить скрипт для запуска cron на Вашем сервере. Если для управления сервера Вы пользуетесь панелью ISPmanager, то заходим в:

Система / Планировщик

и нажимаем на кнопку "Создать"

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

В строке "Команда" вставляем путь к файлу "cron_events.php":

/usr/bin/php /var/www/ВАШ САЙТ/data/www/ВАШ САЙТ/bitrix/php_interface/cron_events.php

Соответственно вместо "ВАШ САЙТ" вставьте папку где хранится Ваш сайт. Правильный путь можно посмотреть в "Менеджере файлов" панели управления ISPmanager.

В строке "Описание" подробно напишите за что отвечает данный cron.
В строке "Расписание" поставьте "экспертный режим".
Далее в строках "Минуты", "Часы", и т. д. везде ставим "*", чтобы задание выполнялось каждую минуту.
В строке "Не отправлять отчет по e-mail" ставим галочку, а то каждую минуту будет приходить письмо об успешном выполнении.

Вот и всё.

Проверить выполняются ли  агенты каждую минуту можно в административной части Вашего сайта. Заходим:

Настройки / Настройки продукта / Агенты

Находим агента с интервалом выполнения в 60 секунд, смотрим на время последнего запуска. Ждём минуту, или более, обновляем страницу. Время последнего запуска должно изменится на минуту вперёд или более, зависит от того, сколько времени Вы не обновляли страницу.

Возврат к списку