9 сентября 2022
2249

Перевод агентов на cron (базовая инструкция)

Инструкция взята с сайта - https://blog.d-it.ru/dev/28/

#Подготовка

Сначала необходимо отключить выполнение агентов на хитах.
Заходим в Настройки -> Инструменты -> Консоль 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", тем самым подтвердив, что мы отключили выполнение агентов на хитах.
Если на сайте работает почта, выполните следующую команду в php-консоле:

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

#Настройка

Заходим в /bitrix/php_interface/dbconn.php в корне сайта.
Находим и убираем следующие константы:

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

После этого добавляем в файл dbconn.php:

if(!(defined("CHK_EVENT") && CHK_EVENT===true))
define("BX_CRONTAB_SUPPORT", true);

Выполнение в cron-е

Нам необходимо создать скрипт, который проверяет агенты и рассылку системных сообщений. И при исполнении которого, будут выполнятся агенты.
В папке /bitrix/php_interface/ создаем файл cron_events.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);

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);
// CAgent::CheckAgents() вызывается два раза специально, чтобы выполнить как периодические агенты, так и не периодические.
CAgent::CheckAgents();
CEvent::CheckEvents();

if(CModule::IncludeModule('sender'))
{
   \Bitrix\Sender\MailingManager::checkPeriod(false);
   \Bitrix\Sender\MailingManager::checkSend();
}

CMain::FinalActions();
?>  

Настройка crontab

Осталось поставить выполнение скрипта в crontab:

* * * * * php -f <SITE-DIR>/bitrix/php_interface/cron_events.php

Где вместо * * * * * можете поставить необходимое время выполнения.

Но нужно правильно указать путь до php (чтобы он был той же версии, что и через Apache), а также путь до сайта.

Есть скрипт, который поможет это сделать.

  1. Переходим в корень сайта на Битрикс (где лежит index.php).
  2. Скачиваем скрипт make-bitrix-cron.sh
  3. Запускаем.
  4. Если он найдет на сервере несколько php, он спросит, какой использовать, нужно выбрать тот вариант, который по версии PHP совпадает с версией PHP в Apache.
  5. Далее он выведет строки, которые нужно добавить в crontab, например:
SITE_WWW="/var/www/example/data/www/example.ru/public_html"

* * * * *  test -f $SITE_WWW/bitrix/modules/main/tools/cron_events.php && { /opt/php71/bin/php -f /bitrix/modules/main/tools/cron_events.php; } >/dev/null 2>&1

  1. С помощью crontab -e редактируем crontab и добавляем туда эти строки.

Готово.

Почему может не работать?

Пока кратко напишу основные моменты:

  1. Константа BX_CRONTAB_SUPPORT в dbconn.php.
  2. Прописанная команда в crontab bitrix/modules/main/tools/cron_events.php
  3. Агент может быть в статусе "Выполняется" (упал или долго работает), поэтому именно он может не запускаться по интервалу.
  4. В b_option может быть опция 'check_agents' == 'N', что отключает агентов.
  5. Вот тут еще несколько вещей описаны, которые могут влиять.
  6. Еще бывает, что раньше стояла другая версия php и после обновления забыли указать путь до php в кроне

Выполнение агентов происходит в prolog.php, а точнее в include.php (а не в tools/cron_events.php, как можно было бы подумать).


Кстати! Стоимость настройки агентов на CRON с сайта на CMS 1С-Битркис нашими специалистами - 1 400 руб.
Позвоните нам!
Личный кабинет
Вам будет доступна история заказов, управление рассылками, свои цены и скидки для постоянных клиентов и прочее.
Ваш логин
Ваш пароль
Работаем для вас с 9:30 до 18:30
Ждем писем!
г. Санкт-Петербург, Краснопутиловская ул., 69