Планировщик Крон Битрикс — Блог Николая

Планировщик Крон Битрикс

от автора

в

У битрикса есть периодически выполняемые функции — агенты.

Агенты могут запускаться

  • на хитах — при каждом формировании страницы
  • на крон — используя планировщик заданий линукс

Все периодические агенты — на хитах, непериодические — на cron.
Установленная bitrix VM уже имеет настроенный планировщик и агенты на cron без всякой доработки.

Управление параметрами работы этого механизма

Константы
BX_CRONTAB_SUPPORT
BX_CRONTAB
Настройки главного модуля (по умолчанию не заданы)
agents_use_crontab
check_agents

BX_CRONTAB_SUPPORT — изначально не установлена

BX_CRONTAB_SUPPORT = true — включает запуск непериодических агентов по cron. Если не установлена, при запуске через cron константа устанавливается автоматически.
BX_CRONTAB_SUPPORT = false — включает запуск всех агентов по cron.

define("BX_CRONTAB_SUPPORT", defined("BX_CRONTAB"));

BX_CRONTAB = true — признак запуска из под cron. То есть должна быть только в запускаемом по cron коде. В оригинале только в cron_events.php

agents_use_crontab = Y — запуск непериодических агентов по cron
agents_use_crontab = N (по умолчанию) — запуск всех агентов по cron

check_agents = Y (по умолчанию) — запускает агенты при каждом хите
check_agents = N — запрещает запуск всех агентов

// установка параметра
COption::SetOptionString("main", "agents_use_crontab", "N"); 
// удаление параметра
COption::RemoveOption("main", "agents_use_crontab")
// просмотр параметра
echo COption::GetOptionString("main", "agents_use_crontab", "N"); 

То есть для перевода всех агентов на cron нужно установить
BX_CRONTAB_SUPPORT = false
agents_use_crontab = N
Теперь агенты будут работать на кроне и на хитах.
В остальных случаях агенты будут распределены

Агенты есть периодические и непериодические

периодические — этот способ позволяет запустить агент точное число раз. Например, раз в день запускается агент очистки старых почтовых событий или агент с ежедневным отчетом о посещаемости сайта.

непериодические — (критично количество запусков) например, агент пересчета рейтингов запускается раз в час. Но если за сутки не было ни одного посетителя, то логичнее выполнить агент один раз и сдвинуть назначенное время следующего запуска на час вперед после запуска. В случае строго периодического агента, этот код выполнился бы все 24 раза в сутки.

время следующего запуска агента

Необходимо настроить планировщик заданий на выполнение скрипта /bitrix/modules/main/tools/cron_events.php
Битрикс VM уже имеет эту настойку и запускает скрипт каждую минуту

* * * * *  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 — ошибки перенаправляются туда же
// файл /home/bitrix/www/bitrix/modules/main/tools/cron_events.php
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../../../..");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];

define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);
define("BX_CRONTAB", true);
define('BX_WITH_ON_AFTER_EPILOG', true);
define('BX_NO_ACCELERATOR_RESET', true);

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

@set_time_limit(0);
@ignore_user_abort(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();

Особенности

  • Время работы скрипта не ограничено
  • Нет привязки к сайту
  • Нет привязки к пользователю

Рекомендации в учебнике не совсем актуальны.
https://dev.1c-bitrix.ru/support