Битрикс

Переводим агентов битрикс на cron

-
14 ноября, 2019

В первую очередь необходимо отключить выполнение всех агентов на хите:

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");
Code language: PHP (php)

После этого убираем из файла /bitrix/php_interface/dbconn.php определение следующих констант:

define("BX_CRONTAB_SUPPORT", true); define("BX_CRONTAB", true);
Code language: JavaScript (javascript)

Вместо них вставляем:

if(!(defined("CHK_EVENT") && CHK_EVENT===true)) define("BX_CRONTAB_SUPPORT", true);
Code language: JavaScript (javascript)

Создаем файл проверки агентов и рассылки системных сообщений /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(); ?>
Code language: HTML, XML (xml)

Добавляем данный скрипт в cron:

crontab -e */2 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
Code language: JavaScript (javascript)

После этого все агенты и отправка системных событий будут обрабатывается из под cron, раз в 2 минуты.

Чтобы не увеличивалась очередь отправки почтовых сообщений, советую изменить параметр отвечающий за количество почтовых событий обрабатываемых за раз. Для этого выполняем в php консоли следующую команду:

COption::SetOptionString("main", "mail_event_bulk", "100");
Code language: PHP (php)

Значение лучше всего подбирать в зависимости от производительности сервера отправки.

ТЕГИ
RELATED POSTS

ОСТАВИТЬ КОММЕНТАРИЙ

Николай Сарры
Харьков, Украина

Меня зовут Николай, и вот уже 5 лет я руководитель IT-проектов.Добро пожаловать в мой лофт с заметками, статьями, идеями и мыслями по управлению проектами, использованию гибких методологий разработки.Здесь собраны мои мысли, решения, заметки и статьи. В основном по управлению проектами, PHP-разработке и используемым инструментам, обзоры прочитанных статей, тезисы посещенных конференций.