Наш блог
Показать рубрики

Перевести все Bitrix агенты на крон

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

Задача: перевести все агенты на крон (Cron)

Решение: создаем скрипт [корневая директория сайта]/local/php_interface/cron.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('NO_AGENT_CHECK', false); //force agents to run
define('BX_CRONTAB_SUPPORT', false); //run periodical and non periodical agents

require $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php';
if ('N' !== COption::GetOptionString('main', 'agents_use_crontab')) {
    COption::SetOptionString('main', 'agents_use_crontab', 'N');
}
if ('N' !== COption::GetOptionString('main', 'check_agents')) {
    COption::SetOptionString('main', 'check_agents', 'N');
}
@set_time_limit(0);

CAgent::CheckAgents();

CEvent::CheckEvents();

if (CModule::IncludeModule('subscribe')) {
    $cPosting = new CPosting();
    $cPosting->AutoSend();
}

Далее нужно установить скрипт на запуск кроном.

Например, для виртуальной машины Bitrix это делается так: в файл /etc/crontab

vi /etc/crontab
нужно добавить одну строчку
* * * * *  bitrix nice /usr/bin/php -f /home/bitrix/www/local/php_interface/cron.php > /dev/null 2>&1

Рассмотрим подробнее некоторые моменты.

1. Скрипт.

1.1. Задав константе BX_CRONTAB_SUPPORT значение false мы получаем запуск как "периодических" агентов так и "не периодических".

За это также отвечает настройка главного модуля agents_use_crontab, поэтому нам нужно удостоверится что она установлена в значение N.

1.2. За запуск агентов на "хитах" отвечает настройка главного модуля check_agents ее нужно установить в значение N. Если ее не отключить то "периодические" агенты будут также запускаться на хитах.

1.3. define('NO_AGENT_CHECK', false); заставляет агенты запускаться, не давая переопределить константу NO_AGENT_CHECK.

1.4. Скрипт также выполняет отправку почты и рассылок, за это отвечают строчки:

CEvent::CheckEvents();

if (CModule::IncludeModule('subscribe')) {
    $cPosting = new CPosting();
    $cPosting->AutoSend();
}

2. Крон

* * * * *  bitrix nice /usr/bin/php -f /home/bitrix/www/local/php_interface/cron.php > /dev/null 2>&1
  • * * * * * - периодичность запуска (одна минута)
  • bitrix - имя пользователя от которого прозводится запуск
  • nice - комманда которая делает процесс "хорошим" по отношении к другим процессам, понижая его приоритет при распределении ресурсов.
  • /usr/bin/php - путь к php интерпретатору
  • /home/bitrix/www/ - корневая директория сайта
  • local/php_interface/cron.php - путь к скрипту относительно корневой директории сайта
  • > /dev/null 2>&1 - перенаправление вывода
    • /dev/null - сюда направляется вывод (в никуда)
    • 2>&1 - ошибки перенаправляются туда же

Выводы

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

Ссылки:

Назад к списку статей
Подпишись на наш блог: