Выполнять агенты через крон (cron)

По умолчанию, при открытии сайта идёт выполнение активных агентов, из-за чего страница может загружаться медленее (т.к. идёт выполнение дополнительного кода).

В целях оптимизации, рекомендуется выполнять агенты через крон.

Сначала, надо отключить выполнение агентов на каждой странице сайта, выполнив следующий код:

COption::SetOptionString("main", "agents_use_crontab", "N");
COption::SetOptionString("main", "check_agents", "N");

echo COption::GetOptionString("main", "agents_use_crontab", "Y"); // должно выводиться "N"
echo COption::GetOptionString("main", "check_agents", "Y"); // должно выводиться "N"

Далее надо подредактировать файл «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);
}

И создать файл bitrix/php_interface/cron_events.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();

И в настройках крона добавить следующее:

*/1 * * * * /usr/bin/php -f /path/to-site/bitrix/php_interface/cron_events.php

В коде выше указано, что раз в минуту надо запускать файл «bitrix/php_interface/cron_events.php».