Задача: перевести все агенты на крон (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.