Выполнение агентов на cron bitrix ошибка

Цитата
Владимир Чадаев написал:
в результатах теста пишут наоборот установитьпо инструкции создается файл /bitrix/php_interface/cron_events.php, в тестах пишут что этот файл тут /www/bitrix/modules/main/tools/cron_events.phpПодскажите пожалуйста как правильно настроить?

Не важно, где находится файл, главное какой из них будет запускаться через cron. И какой код внутри файла. Я недавно переводил себе агентов на крон (у меня из 87). Мой файл www/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(‘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’, true);  
CAgent::CheckAgents();  
require($_SERVER[‘DOCUMENT_ROOT’].’/bitrix/modules/main/tools/backup.php’);
CMain::FinalActions();

В    /bitrix/php_interface/dbconn.php    убрал  define(«BX_CRONTAB_SUPPORT», true);   и    define(«BX_CRONTAB», true);
В cron была одна запись, выполняющая cron_events.php каждые 2 мин.
Всё работало, только процесс крона зависал на сервере и приходилось применять KILL к процессам. Тогда я для каждого агента написал свой php файл (который запускает агента) и отдельную запись в cron для каждого агента. Вроде все агенты выполняются (не всех ещё проверил).

Агенты Битрикса – всевозможные фоновые задачи, необходимые для функционирования системы. Согласно официальной терминологии, агенты — технология, позволяющая запускать произвольные PHP функции (агенты) с заданной периодичностью. Технически агент — это запись в специальной таблице:

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

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

Хочу отдельно отметить слова «в конце загрузки страницы». Запомним их.

Что делают Агенты Битрикса и как работают

Агенты осуществляют отправку почты, сбор мусора, обновление системной информации, контролируют состояние сайта, обновляют метрики, проверяют наличие обновлений и т.д. Имеется возможность писать и собственные функции-агенты.

Агенты могут выполняться с разной периодичностью. Раз в несколько минут, раз в час, раз в день или больше.

И вот тут вспоминаем слова «в конце загрузки страницы». Это значит, что, когда кто-то заходит на любую страницу Вашего сайта, Битрикс проверяет, есть ли агенты, которые пора исполнить. Если сайт имеет высокую посещаемость, желательно еще и равномерно распределенную по времени суток, то никаких проблем у Вас не будет.

Однако, если посещаемость сайта не слишком высока (будем реалистами, 10000 хитов в день есть далеко не у всех) – очередь агентов будет расти. И может вызвать проблемы с производительностью у первого посетителя, который попадет на такой сайт. Да, агенты быстро завершат свою работу и сайт начнет работать с достаточной отзывчивостью. Но в самом начале, в первые несколько кликов – сайт может ощутимо тормозить.

Согласно статистики, каждые 100 миллисекунд ожидания снижают конверсию на 7%. Каждые 2 секунды ожидания увеличивают вероятность того, что пользователь покинет сайт на 103%. Хотите ли вы терять потенциального клиента, который ушел из-за таких вот, чисто технических моментов? Конечно, Вы не хотите.

Как правильно настроить Агенты Битрикс

Для этого существует механизм перевода агентов на встроенный в ОС Linux планировщик – cron.

Он заставляет агенты выполняться по расписанию вне зависимости от посещаемости сайта, так как механизм запуска более не привязывается к загрузке страниц. Вместо этого он привязывается к часам на сервере и за своевременный запуск агентов отвечает операционная система.

Вместе с тем, в течение последних лет наблюдается тенденция к замещению функционала планировщика cron другим механизмом – systemd. Подсистема инициализации и управления службами, которая в 2010-2011 годах фактически вытеснила традиционную init, значительно усовершенствовав ее возможности. Новые функции systemd заменили и планировщик cron. Сейчас он есть в большинстве операционных систем семейства Linux, однако оставлен там скорее для обеспечения совместимости, чем для решения реальных задач.

Кроме того, настройка cron имеет свои тонкости, зависящие отконкретного дистрибутива операционной системы, используемой на сервере. Имеет ли смысл досканально изучать устаревший инструмент, каждый решает сам.

Чтобы не терять времени на думы о высоких материях из области эволюции операционных систем, мы рассмотрим вопросы переключения агентов Битрикс на современный планировщик в лице systemd.

Настройка Агентов на cron systemd

Шаг 1. Отключим исполнение агентов по хитам

Для этого перейдем в административную часть сайта, расположенную по адресу example.ru/bitrix/admin.

Далее Настройки – Инструменты – Командная 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

Шаг 2. Внесем изменения в настройки ядра Битрикс

Для этого отредактируем файл /home/bitrix/ext_www/example.com/bitrix/php_interface/dbconn.php

Внимание! Если у вас не подключен мультисайт, то вероятнее всего этот файл находится в каталоге /home/bitrix/www/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);

В этой же папке создаем (если нет) файл 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_NO_ACCELERATOR_RESET', true);
define('CHK_EVENT', true);
define('BX_WITH_ON_AFTER_EPILOG', 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('sender')) {
    BitrixSenderMailingManager::checkPeriod(false);
    BitrixSenderMailingManager::checkSend();
}

require($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/tools/backup.php");
CMain::FinalActions();

Шаг 3. Создадим службу и таймер для ее запуска в systemd

Переместимся в папку /etc/systemd/system и создадим в ней файл bitrix-agents.service


[Unit]
Description=Bitrix agents for example.com

[Service]
User=bitrix
Group=bitrix
ExecStart=/usr/bin/php -f /home/bitrix/ext_www/example.com/bitrix/php_interface/cron_events.php

Обратите внимание на путь в строке ExecStart. Он должен соответствовать местоположению ранее созданного нами файла cron_events.php.

Создадим второй файл таймера для службы: bitrix-agents.timer. Названия файлов должны совпадать в левой их части, разница только в окончаниях (.service и .timer).


[Unit]
Description=Bitrix agents timer for example.com

[Timer]
OnCalendar=*:0/1

[Install]
WantedBy=timers.target

Как мы знаем из шпаргалки, значение OnCalendar=*:0/1 означает выполнение один раз в минуту. Этого более чем достаточно для наших целей.

Шаг 4. Проверим правильность созданной конфигурации

Выполним команды в консоли сервера:


systemctl daemon-reload
systemd-analyze verify /etc/systemd/system/bitrix-agents.service
systemd-analyze verify /etc/systemd/system/bitrix-agents.timer

Никаких ошибок быть не должно. После этого запустим таймер (и только его!).


systemctl start bitrix-agents.timer
systemctl enable bitrix-agents.timer

В результате раз в минуту будет срабатывать созданный нами таймер и связанная с ним служба, которая будет запускать интерпретатор php от имени пользователя bitrix и выполнять в нем файл cron_events.php, который, в свою очередь, запустит выполнение всех нужных агентов.

Убедиться, что все работает можно при помощи команды


systemctl list-timers

Найдите строку:


NEXT                         LEFT                LAST                         PASSED             UNIT                         ACTIVATES
Thu 2022-01-20 23:38:00 MSK  52s left            Thu 2022-01-20 23:37:01 MSK  6s ago             bitrix-agents.timer             bitrix-agents.service

Если зайти в административную панель Битрикс и перейти в Настройки – Настройки продукта – Агенты Вы также увидите, что все агенты своевременно выполняются.

Агенты Битрикс на Cron

На этом на сегодня все.

Отладка при работе агентов

Инструкция актуальна если агенты модуля деактивируются или не выполняются вовсе.

Включаем логи БУС в .settings.php

Изначально нужно включить логирование в БУС. Для этого есть общая инструкция.

Теперь нам необходимо подождать, пока cron выполнит очередной раз наш файл с агентами. Если есть возможность, то можно запустить его вручную.

При деактивированных агентах следует их активировать и подождать.

После того, как мы подождали 5-10 минут, переходим в файл лога и смотрим ошибки. В логе ошибок ищем наш файл cron_events.php, если есть такой, то смотрим, что пишет и в каком агенте произошла ошибка.

Проверяем ошибки глобально

Также рекомендуется проверить ошибки PHP и MySQL всего сайта, возможно там будет причина.

По коду ошибки ищем откуда она возникла и какая конечная функция у нее

Здесь необходимо проверить сами логи и убедиться, что ошибка исходит не из модуля, если это так, то напишите разработчику того решения, которое вызывает ошибку. Если ошибка модуля, то пишите на почту поддержки [email protected]

Пример ошибки в базе данных

2021-02-01 08:02:45 — Host: — UNCAUGHT_EXCEPTION — [BitrixMainDBSqlQueryException]

Mysql query error: (2006) MySQL server has gone away (400)

`highloadblock_highload_block`.`ID` AS `ID`,

`highloadblock_highload_block`.`NAME` AS `NAME`,

`highloadblock_highload_block`.`TABLE_NAME` AS `TABLE_NAME`

FROM `b_hlblock_entity` `highloadblock_highload_block`

WHERE `highloadblock_highload_block`.`TABLE_NAME` = ‘rbs_ms_stocks’

/home/m/site.test/public_html/bitrix/modules/main/lib/db/mysqliconnection.php:137

#0: BitrixMainDBMysqliConnection->queryInternal(string, array, NULL)

/home/m/site.test/public_html/bitrix/modules/main/lib/db/connection.php:330

#1: BitrixMainDBConnection->query(string)

/home/m/site.test/public_html/bitrix/modules/main/lib/orm/query/query.php:3398

#2: BitrixMainORMQueryQuery->query(string)

/home/m/site.test/public_html/bitrix/modules/main/lib/orm/query/query.php:825

#3: BitrixMainORMQueryQuery->exec()

/home/m/site.test/public_html/bitrix/modules/main/lib/orm/data/datamanager.php:500

#4: BitrixMainORMDataDataManager::getList(array)

/home/m/site.test/public_html/bitrix/modules/rbs.moyskladstocks/lib/hlcache/base.php:16

#5: RbsMoyskladStocksHlCacheBase::getTableInfo(string)

/home/m/site.test/public_html/bitrix/modules/rbs.moyskladstocks/lib/hlcache/base.php:30

#6: RbsMoyskladStocksHlCacheBase::getEntityDataClass(string)

/home/m/site.test/public_html/bitrix/modules/rbs.moyskladstocks/lib/hlcache/base.php:41

#7: RbsMoyskladStocksHlCacheBase::isExsist(string)

/home/m/site.test/public_html/bitrix/modules/rbs.moyskladstocks/lib/hlcache/stocks.php:197

#8: RbsMoyskladStocksHlCacheStocks::isExsist()

/home/m/site.test/public_html/bitrix/modules/rbs.moyskladstocks/lib/agent.php:171

#9: RbsMoyskladStocksAgent::stockCheck(integer, integer)

/home/m/site.test/public_html/bitrix/modules/main/classes/mysql/agent.php(164) : eval()’d code:1

/home/m/site.test/public_html/bitrix/modules/main/classes/mysql/agent.php:164

#11: CAgent::ExecuteAgents(string)

/home/m/site.test/public_html/bitrix/modules/main/classes/mysql/agent.php:42

#12: CAgent::CheckAgents()

/home/m/site.test/public_html/bitrix/php_interface/cron_events.php:16

В примере мы видим, что ошибка возникла в файле cron_events.php (последняя строка) и ошибка якобы в самом модуле, поскольку в логе присутствует путь до модуля. Однако в самом начале лога видно, что ошибка возникает из-за базы данных.

  • Обратиться к хостинг-провайдеру, чтобы увеличили время ожидания при работе с БД.

  • В настройках модуля уменьшить количество выбираемых элементов.

Агенты Битрикса – всевозможные фоновые задачи, необходимые для функционирования системы. Согласно официальной терминологии, агенты — технология, позволяющая запускать произвольные PHP функции (агенты) с заданной периодичностью. Технически агент — это запись в специальной таблице:

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

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

Хочу отдельно отметить слова «в конце загрузки страницы». Запомним их.

Что делают Агенты Битрикса и как работают

Агенты осуществляют отправку почты, сбор мусора, обновление системной информации, контролируют состояние сайта, обновляют метрики, проверяют наличие обновлений и т.д. Имеется возможность писать и собственные функции-агенты.

Агенты могут выполняться с разной периодичностью. Раз в несколько минут, раз в час, раз в день или больше.

И вот тут вспоминаем слова «в конце загрузки страницы». Это значит, что, когда кто-то заходит на любую страницу Вашего сайта, Битрикс проверяет, есть ли агенты, которые пора исполнить. Если сайт имеет высокую посещаемость, желательно еще и равномерно распределенную по времени суток, то никаких проблем у Вас не будет.

Однако, если посещаемость сайта не слишком высока (будем реалистами, 10000 хитов в день есть далеко не у всех) – очередь агентов будет расти. И может вызвать проблемы с производительностью у первого посетителя, который попадет на такой сайт. Да, агенты быстро завершат свою работу и сайт начнет работать с достаточной отзывчивостью. Но в самом начале, в первые несколько кликов – сайт может ощутимо тормозить.

Согласно статистики, каждые 100 миллисекунд ожидания снижают конверсию на 7%. Каждые 2 секунды ожидания увеличивают вероятность того, что пользователь покинет сайт на 103%. Хотите ли вы терять потенциального клиента, который ушел из-за таких вот, чисто технических моментов? Конечно, Вы не хотите.

Как правильно настроить Агенты Битрикс

Для этого существует механизм перевода агентов на встроенный в ОС Linux планировщик – cron.

Он заставляет агенты выполняться по расписанию вне зависимости от посещаемости сайта, так как механизм запуска более не привязывается к загрузке страниц. Вместо этого он привязывается к часам на сервере и за своевременный запуск агентов отвечает операционная система.

Вместе с тем, в течение последних лет наблюдается тенденция к замещению функционала планировщика cron другим механизмом – systemd. Подсистема инициализации и управления службами, которая в 2010-2011 годах фактически вытеснила традиционную init, значительно усовершенствовав ее возможности. Новые функции systemd заменили и планировщик cron. Сейчас он есть в большинстве операционных систем семейства Linux, однако оставлен там скорее для обеспечения совместимости, чем для решения реальных задач.

Кроме того, настройка cron имеет свои тонкости, зависящие отконкретного дистрибутива операционной системы, используемой на сервере. Имеет ли смысл досканально изучать устаревший инструмент, каждый решает сам.

Чтобы не терять времени на думы о высоких материях из области эволюции операционных систем, мы рассмотрим вопросы переключения агентов Битрикс на современный планировщик в лице systemd.

Настройка Агентов на cron systemd

Шаг 1. Отключим исполнение агентов по хитам

Для этого перейдем в административную часть сайта, расположенную по адресу example.ru/bitrix/admin.

Далее Настройки – Инструменты – Командная 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

Шаг 2. Внесем изменения в настройки ядра Битрикс

Для этого отредактируем файл /home/bitrix/ext_www/example.com/bitrix/php_interface/dbconn.php

Внимание! Если у вас не подключен мультисайт, то вероятнее всего этот файл находится в каталоге /home/bitrix/www/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);

В этой же папке создаем (если нет) файл 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_NO_ACCELERATOR_RESET', true);
define('CHK_EVENT', true);
define('BX_WITH_ON_AFTER_EPILOG', 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('sender')) {
    BitrixSenderMailingManager::checkPeriod(false);
    BitrixSenderMailingManager::checkSend();
}

require($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/tools/backup.php");
CMain::FinalActions();

Шаг 3. Создадим службу и таймер для ее запуска в systemd

Переместимся в папку /etc/systemd/system и создадим в ней файл bitrix-agents.service


[Unit]
Description=Bitrix agents for example.com

[Service]
User=bitrix
Group=bitrix
ExecStart=/usr/bin/php -f /home/bitrix/ext_www/example.com/bitrix/php_interface/cron_events.php

Обратите внимание на путь в строке ExecStart. Он должен соответствовать местоположению ранее созданного нами файла cron_events.php.

Создадим второй файл таймера для службы: bitrix-agents.timer. Названия файлов должны совпадать в левой их части, разница только в окончаниях (.service и .timer).


[Unit]
Description=Bitrix agents timer for example.com

[Timer]
OnCalendar=*:0/1

[Install]
WantedBy=timers.target

Как мы знаем из шпаргалки, значение OnCalendar=*:0/1 означает выполнение один раз в минуту. Этого более чем достаточно для наших целей.

Шаг 4. Проверим правильность созданной конфигурации

Выполним команды в консоли сервера:


systemctl daemon-reload
systemd-analyze verify /etc/systemd/system/bitrix-agents.service
systemd-analyze verify /etc/systemd/system/bitrix-agents.timer

Никаких ошибок быть не должно. После этого запустим таймер (и только его!).


systemctl start bitrix-agents.timer
systemctl enable bitrix-agents.timer

В результате раз в минуту будет срабатывать созданный нами таймер и связанная с ним служба, которая будет запускать интерпретатор php от имени пользователя bitrix и выполнять в нем файл cron_events.php, который, в свою очередь, запустит выполнение всех нужных агентов.

Убедиться, что все работает можно при помощи команды


systemctl list-timers

Найдите строку:


NEXT                         LEFT                LAST                         PASSED             UNIT                         ACTIVATES
Thu 2022-01-20 23:38:00 MSK  52s left            Thu 2022-01-20 23:37:01 MSK  6s ago             bitrix-agents.timer             bitrix-agents.service

Если зайти в административную панель Битрикс и перейти в Настройки – Настройки продукта – Агенты Вы также увидите, что все агенты своевременно выполняются.

Агенты Битрикс на Cron

На этом на сегодня все.

Поддержка утверждает, что на стороне продукта все ок, в maillog.txt попадают письма все, и вероятно есть проблемы с работой cron (хотя резервные копии по крону успешно создаются, например)
Но вот msmtp.log ничем не наполняется, в нет ни ошибок подключения, ни успешных подключений. В таблице b_event они со статусом F.

Может кто-то сталкивался с подобной ситуацией?

Вообщем, битва с 3 сентября все же выиграна) Как оказалось стоило не вручную добавлять в cron команду, а в через «управление масштабированием» в админке самого сайта включить крон.

Ошибка! Не настроен запуск cron_events.php на cron, последний агент отработал больше суток назад.

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

А письма тогда как ходят?)) Ничего с кронтабом не делал, поддержка сказала что достаточно включить в веб-окружении крон.

# Ansible managed
# cron tasks for site kreslobum.ru
#

А письма тогда как ходят?)) Ничего с кронтабом не делал, поддержка сказала что достаточно включить в веб-окружении крон.

# Ansible managed
# cron tasks for site kreslobum.ru
#

Неужели путь неверный. не сходится согласно этой статьи. https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2943&LESSO.

Информации о том, успешно или нет, там не будет, там будет лишь сам факт запуска.

Дальше Вы можете проверить сам запуск, в консоли:

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Цитата
Олег Дыбкин написал:
Цитата
Олег Дыбкин написал:

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Всё это уже есть по умолчанию, при установке bitrixn-env.

Но, есть вопрос. Точно ли при такой настройке выполняются на кроне именно все агенты?
В описании указано, что так выполняются только непериодические агенты.

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Цитата
После этого на хитах будут выполняться только периодические агенты.
Цитата
скрипт работает из cron и приводит к выполнению только непериодических агентов.

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Цитата
red_eye написал:
Точно ли при такой настройке выполняются на кроне именно все агенты?

UPD.
НО в списке агентов не исполняются (скрин)! Т.е. последнее время исполнения остается старым.

А то уже голова поломалась, искать в чем проблема.

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Откатывать, как оказалось не обязательно. Нужно понять что cron работает очень специфически.

Значит что в итоге:

После добавления скриптов в crontab перезапустить по инструкции выше. Мне помогло. Может кому-то другому поможет тоже.
Написанная инструкция актуальна для BitrxVM.

Источник

Добрый день, уважаемые коллеги!

Вначале немного представлюсь. Меня зовут Рыжонин Николай, в «1С-Битрикс» я курирую направление производительности продуктов компании. Если у вас есть вопросы, предложения или пожелания, касающиеся производительности, обращайтесь e-mail: rns@bitrix.ru

Данная тема уже не раз подымалась ( например тут ), но тем не менее все таки решил опубликовать обобщенное решения для выполнения всех агентов из под cron.

Для начала полностью отключим выполнение агентов на хите. Для этого выполним следующую команду в php консоли.

Создаем файл проверки агентов и рассылки системных сообщений /bitrix/php_interface/cron_events.php

И добавляем данный скрипт в cron

После этого все агенты и отправка системных событий будут обрабатывается из под cron, раз в 5 минут. Чтобы не увеличивалась очередь отправки почтовых сообщений, советую изменить параметр отвечающий за количество почтовых событий обрабатываемых за раз. Для этого выполняем в php консоли следующую команду

Не могу понять, что делает флаг «agents_use_crontab»

1// Если мы выполняем COption::SetOptionString(«main», «agents_use_crontab», «Y»), то на хитах остануться работать только периодические агенты (т.е. эта строка подключает крон для непериодических агентов?).

2// А если выполним COption::SetOptionString(«main», «agents_use_crontab», «N»), то что. по смыслу ведь вроде получается наоборот: мы ОТКЛЮЧАЕМ, а не включаем использование крона.

Советую, чтобы не забивать себе голову, использовать модуль Агенты на крон е.

письма приходят, если раскомментировать то SUCCESS_EXEC =F

Подскажите пожалуйста какие могут быть причины.

на выходе html-код и ошибка
Fatal error: Class ‘BitrixMailMessage’ not found in /home/bitrix/www/bitrix/modules/main/lib/mail/eventmessagethemecompiler.php(273) : eval()’d code on line 26

Не сталкивались?

Проверка на наличие неотправленных сообщений:

Ошибка! Есть ошибки при отправке системных почтовых сообщений, число неотправленных сообщений: 4598 Определена константа BX_CRONTAB_SUPPORT в /bitrix/php_interface/dbconn.php, при этом должен быть настроен вызов агентов на cron.

Помогите, сделано всё по вашей инсрукции

Елена Пилюшенко, в /etc/crontab например
только синтаксис тогда нужен такой

или создать(отредактировать) соответствующий файлик в /etc/cron.d/

Солдатов Игорь, похожу с обновлением есть изменения и этот прием с двумя «CAgent::CheckAgents();» не катит

попробуйте закоментировать первый //CAgent::CheckAgents();

1С-Битрикс: Управление сайтом 17.5.4
Серв на centos, веб-окружение битрикс.
Все завелось без проблем.
Спасибо автору!

Силуянов Александр,
Сначала сделал файл как написано в секции «Создаем файл проверки агентов и рассылки системных сообщений /bitrix/php_interface/cron_events.php (обновлен 10.09.2015)»

Как добавить в крон?
nano /etc/crontab
И вперед.

Царев Дмитрий, странно. На свежей виртуалке от битрикса нет файла crontab.
Он так и пишет: no crontab for foot

Царев Дмитрий, установил модуль «Агенты на кроне» из маркетплейса.
В его настройках, внизу написано:
Настройка cron

cron — это программа на сервере, которая запускается раз в минуту и выполняет ваши команды в указанное время.

Для работы агентов на кроне необходимо настроить, чтобы стандартный файл Битрикса /bitrix/modules/main/tools/cron_events.php вызывался, например, раз в минуту.

В Виртуальной машине Битрикса ничего не надо делать, там уже есть соответствующая настройка для каждого сайта (файл /etc/crontab). На специализированных хостингах под Битрикс тоже могут быть заранее сделаны настройки.

У вас Виртуальная машина Битрикса версии 7.2.2.

Вместо /usr/bin/php, у вас может быть другой путь. Узнайте у техподдержки вашего хостинга, как правильно настраивать крон, или найдите в часто задаваемых вопросах на сайте хостинга.

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

_____________________

Может там и не надо ни чего настраивать. Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад
Как вообще проверить отрабатывает ли агент на кроне?

Источник

Переключение агентов на cron

Цитата
Результат теста: Ошибка! Не настроен запуск cron_events.php на cron, последний агент отработал больше суток назад.

Чтобы перенести работу непериодических агентов (и передачу почты) на cron, необходимо в /bitrix/php_interface/dbconn.php установить константу:
define(‘BX_CRONTAB_SUPPORT’, true);

После этого на хитах будут выполняться только периодические агенты. Затем в cron поставить задание на ежеминутный запуск скрипта /var/www/bitrix/modules/main/tools/cron_events.php.
(замените /var/www на свой путь к корню сайта).

Цитата
Убираем из файла /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, в тестах пишут что этот файл тут /www/bitrix/modules/main/tools/cron_events.php

Подскажите пожалуйста как правильно настроить?

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Цитата
Владимир Чадаев написал:
Результат теста: Ошибка! Не настроен запуск cron_events.php на cron, последний агент отработал больше суток назад.Чтобы перенести работу непериодических агентов (и передачу почты) на cron, необходимо в /bitrix/php_interface/dbconn.php установить константу:define(‘BX_CRONTAB_SUPPORT’, true);После этого на хитах будут выполняться только периодические агенты. Затем в cron поставить задание на ежеминутный запуск скрипта /var/www/bitrix/modules/main/tools/cron_events.php.(замените /var/www на свой путь к корню сайта).

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Цитата
Владимир Чадаев написал:
в результатах теста пишут наоборот установитьпо инструкции создается файл /bitrix/php_interface/cron_events.php, в тестах пишут что этот файл тут /www/bitrix/modules/main/tools/cron_events.phpПодскажите пожалуйста как правильно настроить?

Не важно, где находится файл, главное какой из них будет запускаться через cron. И какой код внутри файла. Я недавно переводил себе агентов на крон (у меня из 87). Мой файл www/bitrix/php_interface/cron_events.php:

define(‘NO_KEEP_STATISTIC’, true);
define(‘NOT_CHECK_PERMISSIONS’,true);
define(‘BX_NO_ACCELERATOR_RESET’, true);

Источник

Переключение агентов на cron

Цитата
Результат теста: Ошибка! Не настроен запуск cron_events.php на cron, последний агент отработал больше суток назад.

Чтобы перенести работу непериодических агентов (и передачу почты) на cron, необходимо в /bitrix/php_interface/dbconn.php установить константу:
define(‘BX_CRONTAB_SUPPORT’, true);

После этого на хитах будут выполняться только периодические агенты. Затем в cron поставить задание на ежеминутный запуск скрипта /var/www/bitrix/modules/main/tools/cron_events.php.
(замените /var/www на свой путь к корню сайта).

Цитата
Убираем из файла /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, в тестах пишут что этот файл тут /www/bitrix/modules/main/tools/cron_events.php

Подскажите пожалуйста как правильно настроить?

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Цитата
Владимир Чадаев написал:
Результат теста: Ошибка! Не настроен запуск cron_events.php на cron, последний агент отработал больше суток назад.Чтобы перенести работу непериодических агентов (и передачу почты) на cron, необходимо в /bitrix/php_interface/dbconn.php установить константу:define(‘BX_CRONTAB_SUPPORT’, true);После этого на хитах будут выполняться только периодические агенты. Затем в cron поставить задание на ежеминутный запуск скрипта /var/www/bitrix/modules/main/tools/cron_events.php.(замените /var/www на свой путь к корню сайта).

Ошибка не настроен запуск cron events php на cron последний агент отработал больше суток назад

Цитата
Владимир Чадаев написал:
в результатах теста пишут наоборот установитьпо инструкции создается файл /bitrix/php_interface/cron_events.php, в тестах пишут что этот файл тут /www/bitrix/modules/main/tools/cron_events.phpПодскажите пожалуйста как правильно настроить?

Не важно, где находится файл, главное какой из них будет запускаться через cron. И какой код внутри файла. Я недавно переводил себе агентов на крон (у меня из 87). Мой файл www/bitrix/php_interface/cron_events.php:

define(‘NO_KEEP_STATISTIC’, true);
define(‘NOT_CHECK_PERMISSIONS’,true);
define(‘BX_NO_ACCELERATOR_RESET’, true);

Источник

Устранение ошибок CMS Битрикс

Опция «Проверка системы» в CMS Битрикс позволяет проверить соответствие настроек хостинга требованиям CMS и вашего сайта. При запуске этой опции на хостинге Timeweb, Битрикс, как правило, приводит несколько ошибок и замечаний. В этой статье мы рассмотрим, как их исправить.

Отправка почты

Речь идет о двух параметрах: «Отправка почты» и «Отправка почтового сообщения больше 64Кб».

Уведомление: Ошибка! Не работает

Эта ошибка возникает, если вы используете хостинг на тестовом периоде — до оплаты услуги почта недоступна. Как только хостинг будет оплачен, почта заработает.

Режим работы MySQL

Уведомление: Ошибка! innodb_strict_mode=ON, требуется OFF. Переменная sql_mode в MySQL должна быть пустая, текущее значение: NO_ENGINE_SUBSTITUTION

Эта ошибка критична. Она может привести к блокировке запросов к базе данных, что практически означает остановку работы сайта.

Решение:

Необходимо внести изменения в файлы конфигурации Bitrix, в которых задаются параметры базы данных, и указать в них нужные значения. Отредактировать файлы можно, например, с помощью Файлового менеджера.

После этого проверка Bitrix пройдет успешно.

Размер стека и pcre.recursion_limit

Уведомление: Замечание: Возможны проблемы в работе с длинными строками из за системных ограничений

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

Этот параметр влияет на возможность обработки строк регулярными выражениями. Лимит по умолчанию установлен достаточно большой, чтобы можно было обработать практически любой контент на сайте, но для устранения замечания можно дополнительно внести изменения.

Решение:

Выполнение агентов на cron

Уведомление: Замечание: Агенты выполняются на хитах, рекомендуется перенести их выполнение на cron

Это замечание некритично. В Битрикс предусмотрен внутренний планировщик задач (агентов). Данное замечание влияет на то, насколько точно по времени сработают запланированные задачи. Грубо говоря, скрипты сайта выполняются, только когда его страницы кто-то посещает. Если нет посещений, то и таймер работать не будет. Cron позволяет полностью решить проблему с планированием задач.

Решение:

Для этого добавьте в файл /public_html/bitrix/php_interface/dbconn.php строку:

1. В разделе Crontab нажмите «Добавить новую задачу» и задайте удобное имя для задачи.

2. В пункте «Исполнитель» выберите «Исполняемый бинарный файл».

3. В пункте «Путь до файла» укажите команду следующего вида:

4. В пункте «Периодичность» выберите «Каждую минуту».

Уведомление: Ошибка! Не настроен запуск cron_events.php на cron

Эта ошибка может возникнуть, если в пункте выше вы только добавили константу, но не добавили задачу cron. Без настройки задачи в crontab будет остановлена часть агентов, в том числе с сайта перестанет отправляться почта. Письма будут накапливаться в очередь и отправляться по частям после устранения ошибки.

Решение:

Выполните приведенную выше инструкцию по добавлению задачи cron, и ошибка будет устранена.

Обязательные параметры PHP

Уведомление: Ошибка! Значение max_input_vars должно быть не ниже 10000

Эта ошибка не влияет на работоспособность сайта напрямую, но может отразиться на работе с большими формами в административной панели. При работе с инфоблоками низкое значение параметра max_input_vars может вызвать проблемы с сохранением настроек, поэтому система выделяет эту ошибку как критическую.

Решение:

Необходимо добавить следующую строку в файл /public_html/.htaccess :

Источник

Здравствуйте.

Установил на чистый сервер Bitrix virtual appliance version 7.4.3
CentOS Linux release 7.8.2003 (Core)

В консоли Bitrix Env сайт включен на крон (https://dev.1c-bitrix.ru/learning/course/index.php…

Found 1 kernel sites:
------------------------------------------------------------------------------------
SiteName        | dbName          |          Status |  Cron | DocumentRoot
------------------------------------------------------------------------------------
default         | sitemanager     |        finished |     Y | /home/bitrix/www
------------------------------------------------------------------------------------

Агенты при этом не выполняются. Дополнительно добавил задание в крон по инструкции https://dev.1c-bitrix.ru/learning/course/?COURSE_I…

[root@sss log]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

#* * * * * bitrix test -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php && { /usr/bin/php -d sendmail_path="msmtp -t -i -a default" -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php; } >/dev/null 2>&1

0 2 * * 6 root /opt/webdir/bin/bx-dehydrated
[root@sss log]# crontab -l -u bitrix
*/1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php

Логи:

Jun 22 20:26:01 sss CROND[14213]: (bitrix) CMD (test -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php && { /usr/bin/php -d sendmail_path="msmtp -t -i -a default" -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php; } >/dev/null 2>&1)
Jun 22 20:26:01 sss CROND[14215]: (root) CMD (/opt/webdir/bin/restart_httpd-scale.sh process)
Jun 22 20:26:01 sss CROND[14216]: (bitrix) CMD (/usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php)
Jun 22 20:26:02 sss CROND[14212]: (bitrix) MAIL (mailed 89 bytes of output but got status 0x0041#012)

dbconn.php

<?
define("BX_USE_MYSQLI", true);
define("DBPersistent", false);
$DBType = "mysql";
$DBHost = "localhost";
$DBLogin = "bitrix0";
$DBPassword = "****";
$DBName = "sitemanager";
$DBDebug = false;
$DBDebugToFile = false;
define("MYSQL_TABLE_TYPE", "INNODB");

define("DELAY_DB_CONNECT", true);
define("CACHED_b_file", 3600);
define("CACHED_b_file_bucket_size", 10);
define("CACHED_b_lang", 3600);
define("CACHED_b_option", 3600);
define("CACHED_b_lang_domain", 3600);
define("CACHED_b_site_template", 3600);
define("CACHED_b_event", 3600);
define("CACHED_b_agent", 3660);
define("CACHED_menu", 3600);

define("BX_UTF", true);
define("BX_FILE_PERMISSIONS", 0644);
define("BX_DIR_PERMISSIONS", 0755);
@umask(~(BX_FILE_PERMISSIONS|BX_DIR_PERMISSIONS)&0777);
define("BX_DISABLE_INDEX_PAGE", true);

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

Но агенты не выполняются, проверяют через Настройки > Настройки продукта> Агенты. Даты последнего запуска старые.
Подскажите пожалуйста, как исправить, в чем проблема?

update

Крон 100% отрабатывает. Проблема не в нем. Пробовал добавить в /home/bitrix/www/local/php_interface/cron_events.php строку с mail() php, письмо по запуску с cron пришло. Что-то с выполнением периодических агентов.

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Вылетает ошибка сервисы гугл плей
  • Выпишите только те предложения где допущены пунктуационные ошибки
  • Вылетает ошибка при установке гта 5
  • Выпивая молоко оно прокисло грамматическая ошибка

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии