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

  • 08.09.2019

По умолчанию, в Битриксе агенты выполняются на хитах, то есть при каждом посещении сайта пользователем. Когда пользователь кликает по страницам, Битрикс проверяет, какие агенты уже пора стартануть и выполняет их. У этого способа есть недостатки: нерегулярность запуска всего, что нужно и второй недостаток: конкретные тормоза при нагруженных агентах. Недостатки можно исключить, если запускать агенты с помощью cron.

Перво-наперво все почтовые события вешаются на cron. Он работает с минимальной частотой раз в минуту. Но есть и минусы, получается, что пользователь нажимает «восстановить пароль» и минуту ждет письмо. Еще один недостаток — резервное копирование по расписанию.

Но в целом, серверное выполнение по крону более правильное. Переходим к настройкам.

Чтобы выполнять агенты через крон нужно открыть консоль PHP , находящуюся в Настройки>Инструменты>Командная строка PHP и выполнить команду

1. Запустите выполнение периодических агентов

Перейдя по адресу Настройки > Инструменты > Командная PHP-строка, выполните команду:

COption::SetOptionString("main", "agents_use_crontab", "Y");
echo COption::GetOptionString("main", "agents_use_crontab", "N");

Подтверждение «Y» означает, что выполняются только периодические хиты

Теперь на странице Настройки > Настройки продукта > Агенты настройте показ колонки Периодический. Выберите в ней почтовые агенты и проверьте, выставлены ли флаги «периодический». Если нет, поставьте флаги.

Добавьте в cron команду

/usr/bin/php -f /var/www/bitrix/modules/main/tools/cron_events.php 

и установите почтовым агентам периодичность в 1 минуту в формате

*/1 * * * *

2. Общее решение для запуска всех агентов из-под 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».

Теперь находим файл:

/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 следующего содержания:

AutoSend();
} 
?>

И добавляем этот скрипт в cron:

*/5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php 

3. Не забудьте увеличить количество обрабатываемых за раз событий

Если этого не сделать, то будет образовываться очередь из неотправленных сообщений

Открываем PHP-консоль Настройки > Инструменты > Командная PHP-строка и выполним команду

COption::SetOptionString("main", "mail_event_bulk", "20"); 
echo COption::GetOptionString("main", "mail_event_bulk", "5"); 

Comments are closed.