Портал > База знаний > Bitrix > Выполнение всех агентов на cron
Если агенты занимают несколько десятых долей секунды, то уже стоит задуматься о переносе агентов на cron. "Тяжелым" считается агент, который выполняется более 10 секунд.
Не стоит забывать и про накопительный эффект агентов. Если агенты запускаются на хитах, то при маленькой посещаемости и при длительном окне без посетителей может скопиться достаточное количество агентов, ожидающих запуска. Тогда следующего посетителя встретят не самые быстрые секунды на вашем сайте.
Чтобы полностью отключить выполнение агентов на хите перейдем на страницу Настройки > Инструменты > Командная 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".
После чего закомментируем в конфигурационном файле /bitrix/php_interface/dbconn.php определение следующих констант:
#nano /home/bitrix/www/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 со следующим содержимым:
#nano /home/bitrix/www/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");
CMain::FinalActions();
?>
Добавим данный скрипт в cron:
#crontab -e -u bitrix
*/1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
После этого все агенты и отправка системных событий будут обрабатывается из cron, раз в 1 минуту. Чтобы не увеличивалась очередь отправки почтовых сообщений, необходимо изменить параметр отвечающий за количество почтовых событий обрабатываемых за раз. Для этого выполним в командной PHP-строке следующую команду:
COption::SetOptionString("main", "mail_event_bulk", "20");
echo COption::GetOptionString("main", "mail_event_bulk", "5");
Добавить в избранное Распечатать статью
Powered by WHMCompleteSolution