+7 495 008 8452
  • Загрузка
Выберите ваш цвет
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


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

Добрый день, уважаемые коллеги!

Вначале немного представлюсь. Меня зовут Рыжонин Николай, в "1С-Битрикс" я курирую направление производительности продуктов компании. Если у вас есть вопросы, предложения или пожелания, касающиеся производительности, обращайтесь e-mail: rns@bitrix.ru



Данная тема уже не раз подымалась (например тут), но тем не менее все таки решил опубликовать обобщенное решения для выполнения всех агентов из под cron.



Для начала полностью отключим выполнение агентов на хите. Для этого выполним следующую команду в 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 (обновлен 10.09.2015)

<?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

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


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

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


Обновлено:
- 22.03.2018 - Изменен скрипт для лучшей совместимости с push&pull


 

 

Источник: http://dev.1c-bitrix.ru/community/webdev/user/8078/blog/implementation-of-all-agents-in-cron/

Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...