Узнай стоимость продвижения
Ответим в течение рабочего дня
После заявки созвонимся для уточнения деталей

Cron в Битриксе

Для регулярных задач в Битриксе используют функционал Агентов. Это такая функциональная замена крону, которая по расписанию готова выполнять ваши задачи.

Что такое кеш?

Для запуска функций в заданное время, в битриксе существует технология Агентов.

По умолчанию, агенты выполняются на хитах, то есть при каждом посещении сайта пользователем, битрикс проверяет, какие агенты пора запускать и выполняет их. У этого способа есть два недостатка — во первых, при нерегулярном посещении агенты могут запускаться позже чем нужно. Во вторых — тяжёлые агенты могут затормозить работу сайта. От обоих недостатков можно избавиться, если запускать агенты с помощью cron.
Чтобы выполнять агенты через крон нужно открыть консоль PHP , находящуюся в Настройки>Инструменты>Командная строка 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:
<?
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../..");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];

define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true); 
define('CHK_EVENT', 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("subscribe"))
{
      $cPosting = new CPosting;
      $cPosting->AutoSend();
} 
?>
И добавляем данный скрипт в cron:

*/5 * * * * /usr/bin/php -f путь_к_bitrix/bitrix/php_interface/cron_events.php

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

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

На этом настройка крона в Bitrix закончена.


Автор
Антон Чуркин
Bitrix программист Альтопромо