Настройка cron 1с битрикс
Агенты Битрикса – всевозможные фоновые задачи, необходимые для функционирования системы. Согласно официальной терминологии, агенты - технология, позволяющая запускать произвольные PHP функции (агенты) с заданной периодичностью. Технически агент - это запись в специальной таблице:
- какой код надо выполнить,
- когда выполнить,
- с каким периодом выполнять,
- каким способом назначать время следующего запуска агента (строго периодический или нестрого периодический агент).
В самом конце загрузки каждой страницы после отдачи контента браузеру система автоматически проверяет, есть ли агент, который нуждается в запуске и исполняет его в случае необходимости.
Хочу отдельно отметить слова «в конце загрузки страницы». Запомним их.
Что делают Агенты Битрикса и как работают
Агенты осуществляют отправку почты, сбор мусора, обновление системной информации, контролируют состояние сайта, обновляют метрики, проверяют наличие обновлений и т.д. Имеется возможность писать и собственные функции-агенты.
Агенты могут выполняться с разной периодичностью. Раз в несколько минут, раз в час, раз в день или больше.
И вот тут вспоминаем слова «в конце загрузки страницы». Это значит, что, когда кто-то заходит на любую страницу Вашего сайта, Битрикс проверяет, есть ли агенты, которые пора исполнить. Если сайт имеет высокую посещаемость, желательно еще и равномерно распределенную по времени суток, то никаких проблем у Вас не будет.
Однако, если посещаемость сайта не слишком высока (будем реалистами, 10000 хитов в день есть далеко не у всех) – очередь агентов будет расти. И может вызвать проблемы с производительностью у первого посетителя, который попадет на такой сайт. Да, агенты быстро завершат свою работу и сайт начнет работать с достаточной отзывчивостью. Но в самом начале, в первые несколько кликов – сайт может ощутимо тормозить.
Согласно статистики, каждые 100 миллисекунд ожидания снижают конверсию на 7%. Каждые 2 секунды ожидания увеличивают вероятность того, что пользователь покинет сайт на 103%. Хотите ли вы терять потенциального клиента, который ушел из-за таких вот, чисто технических моментов? Конечно, Вы не хотите.
Как правильно настроить Агенты Битрикс
Для этого существует механизм перевода агентов на встроенный в ОС Linux планировщик – cron.
Он заставляет агенты выполняться по расписанию вне зависимости от посещаемости сайта, так как механизм запуска более не привязывается к загрузке страниц. Вместо этого он привязывается к часам на сервере и за своевременный запуск агентов отвечает операционная система.
Вместе с тем, в течение последних лет наблюдается тенденция к замещению функционала планировщика cron другим механизмом – systemd. Подсистема инициализации и управления службами, которая в 2010-2011 годах фактически вытеснила традиционную init, значительно усовершенствовав ее возможности. Новые функции systemd заменили и планировщик cron. Сейчас он есть в большинстве операционных систем семейства Linux, однако оставлен там скорее для обеспечения совместимости, чем для решения реальных задач.
Кроме того, настройка cron имеет свои тонкости, зависящие отконкретного дистрибутива операционной системы, используемой на сервере. Имеет ли смысл досканально изучать устаревший инструмент, каждый решает сам.
Чтобы не терять времени на думы о высоких материях из области эволюции операционных систем, мы рассмотрим вопросы переключения агентов Битрикс на современный планировщик в лице systemd.
Настройка Агентов на cron systemd
Шаг 1. Отключим исполнение агентов по хитам
Далее Настройки – Инструменты – Командная PHP строка.
Впишем туда код:
Результат выполнения команды должен отобразить надпись NN
Шаг 2. Внесем изменения в настройки ядра Битрикс
Внимание! Если у вас не подключен мультисайт, то вероятнее всего этот файл находится в каталоге /home/bitrix/www/bitrix/php_interface/dbconn.php
Удалим или закомментируем строки с текстом (если они там есть):
Также в конце файла добавим
В этой же папке создаем (если нет) файл cron_events.php следующего содержания:
Шаг 3. Создадим службу и таймер для ее запуска в systemd
Переместимся в папку /etc/systemd/system и создадим в ней файл bitrix-agents.service
Обратите внимание на путь в строке ExecStart. Он должен соответствовать местоположению ранее созданного нами файла cron_events.php.
Создадим второй файл таймера для службы: bitrix-agents.timer. Названия файлов должны совпадать в левой их части, разница только в окончаниях (.service и .timer).
Как мы знаем из шпаргалки, значение OnCalendar=*:0/1 означает выполнение один раз в минуту. Этого более чем достаточно для наших целей.
Шаг 4. Проверим правильность созданной конфигурации
Выполним команды в консоли сервера:
Никаких ошибок быть не должно. После этого запустим таймер (и только его!).
В результате раз в минуту будет срабатывать созданный нами таймер и связанная с ним служба, которая будет запускать интерпретатор php от имени пользователя bitrix и выполнять в нем файл cron_events.php, который, в свою очередь, запустит выполнение всех нужных агентов.
Убедиться, что все работает можно при помощи команды
Если зайти в административную панель Битрикс и перейти в Настройки – Настройки продукта – Агенты Вы также увидите, что все агенты своевременно выполняются.
Цитатник веб-разработчиков В тексте курса вы встретите цитаты, высказанные в разное время разработчиками системы и разработчиками проектов на базе Bitrix Framework. Надеемся, что такие неформальные замечания внесут некоторое разнообразие в процесс изучения. Заодно опытные специалисты поделятся и своим опытом.
Имена авторов цитат даются в том написании, в каком авторы зарегистрировали себя на сайте "1С-Битрикс". .
Курс для разработчиков - продолжение линейки учебных курсов по Bitrix Framework. Получение сертификата по курсу рекомендуется после успешной сдачи тестов по всей линейке курсов, так как без понятия о работе Контент-менеджера и Администратора создание успешных сайтов будет затруднено.
Чтобы научиться программировать в Bitrix Framework, нет необходимости изучать всю линейку курсов. Но есть моменты, которые необходимо знать разработчикам о системе, они раскрыты в начальных курсах:
- Интерфейс программы - в главе Элементы управления курса Контент-менеджер.
- Компоненты 2.0 (начальные сведения) в главе Компоненты 2.0 (начальные сведения) курса Контент-менеджер.
- Информационные блоки - в главе Информационные блоки (начальные сведения) курса Контент-менеджер.
- Управление доступом к файлам, элементам контента, модулям и другие права доступа в главе Управление доступом курса Администратор. Базовый.
- Работа с инструментами системы - в главе Работа с инструментами курса Администратор. Базовый.
- Модуль Поиск - в главе Поиск курса Администратор. Базовый.
- Вся информация по администрированию модулей размещена в курсах:
-
- модули "1С-Битрикс: Управление сайтом" - модули "1С-Битрикс: Управление сайтом", связанные с коммерческой деятельностью в Интернете. - модули "1С-Битрикс: Корпоративный портал"
Как построен курс
Общепринятая градация квалификации разработчиков в рамках курса обозначает что:
- Junior сможет создавать простые сайты работая со штатными компонентами и модифицируя их шаблоны.
- Middle разработчик может работать с API Bitrix Framework.
- Senior умеет работать над производительностью и безопасностью сайтов, создавать свои модули и компоненты.
Примечание: Такое построение удобно для пошагового изучения принципов работы Bitrix Framework. По этому же принципу построены и тесты. Но такая структура не очень удобна для использования содержания курса как постоянного источника информации. Что бы переключить курс в режим Справочника, воспользуйтесь переключателем в верхнем правом углу шапки курса.
Начальные требования к подготовке
Для успешного изучения курса и овладения мастерством разработки сайтов на Bitrix Framework необходимо владеть (хотя бы на начальном уровне):
- основами PHP, баз данных;
- основами HTML, CSS.
У нас часто спрашивают, сколько нужно заплатить
Курс полностью бесплатен. Изучение курса, прохождение итоговых тестов и получение сертификатов - ничего из этого оплачивать не нужно.
Ещё у нас есть Академия 1С-Битрикс, где можно обучиться на платной основе на курсах нашей компании либо наших партнёров.
Баллы опыта
В конце каждого урока есть кнопка Прочитано! . При клике на неё в Вашу итоговую таблицу опыта добавляется то количество баллов, которое указано в прочитанном После нажатия кнопки Прочитано! появится
окно подтверждения:
уроке.
Периодически мы заново оцениваем сложность уроков, увеличивая/уменьшая число баллов, поэтому итоговое количество набранных Вами баллов может отличаться от максимально возможного. Не переживайте! Отличный результат - это если общее число набранных Вами баллов отличается от максимального на 1-2%.
Тесты
После изучения курса вам будет предложено пройти тесты на сертификацию. При успешной сдаче последовательности тестов на странице Моё обучение можно просмотреть результат обучения и загрузить сертификат в формате PDF.
Комментарии к статьям
Что дальше?
Одновременно с изучением курса Разработчик Bitrix Framework вам придётся обращаться к информации о других технологиях Bitrix Framework. Эта информация размещена в следующих курсах:
Для преподавания офлайн
Если данный курс берётся в качестве основы для офлайнового преподавания, то рекомендуемая продолжительность: 5 дней (40 академических часов).
Если нет интернета
iPhone:
FBReader
CoolReader
iBook
Bookmate
Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome
iOS
Marvin for iOS
ShortBook
обновляются периодически, поэтому возможно некоторое отставание их от онлайновой версии курса. Версия файла - от 10.03.2022.
Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Данная тема уже не раз подымалась ( например тут ), но тем не менее все таки решил опубликовать обобщенное решения для выполнения всех агентов из под cron.
Для начала полностью отключим выполнение агентов на хите. Для этого выполним следующую команду в php консоли.
В результате выполнения должно быть "NN".
После этого убираем из файла /bitrix/php_interface/dbconn.php определение следующих констант:
И добавляем данный скрипт в cron
Обновлено:
- 10.09.2015 - Изменен скрипт запуска агента
- 22.03.2018 - Изменен скрипт для лучшей совместимости с push&pull
- 14.01.2020 - Уменьшено время между запусками агента
Николай подскажите, вы ранее писали, что
На данный момент при переводе агентов полностью на крон необходимо создавать свой файл их вызова и именно его подключать в кроне. Изменение стандартного файла сделаем в случае если данный способ запуска будет способом по умолчанию в BitrixEnv/BitrixVM |
Для того что бы вся почта нормально отправлялась по крону необходимо настраивать свой скрипт для запуска . Стандартный скрипт указанный в cron, при данных настройках не отработает. |
В версии BitrixEnv/BitrixVM 5.1.2, насколько я знаю, работа агентов и почты на кроне стала способом по умолчанию. По крайней мере у нас таким образом установились настройки агентов и почты после установки BitrixEnv/BitrixVM и создании с помощью нее дополнительный сайтов.
Скажите на данный момент стандартный файл cron_events.php изменен для корректной отправки почты на кроне? И как обстоит дело с переводом на крон почты в многосайтовой конфигурации, организованной с помощью BitrixEnv/BitrixVM. Ведь теперь для каждого сайта определены свои настройки почты.
Или все также нужно создавать свой файл cron_events.php для запуска?
Нет, в том то и дело, что не отправляется корректно по умолчанию. По крайней мере в версии 5.1.2 веб окружения. Вынуждены были перевести отправку почты с агента на хит. Ведь по умолчанию в веб окружении почта отправляется на агенте. Тикет №592787 в техподдержке.
И добавляем данный скрипт в cron
Или вместо "bitrix" указать имя пользователя от которого работает сайт. Я пишу просто применительно к виртуальной машине Битрикс.
У некоторых еще может быть проблема если эта строка последняя в файле crontab, кто-то рекомендовал добавить две пустые строки в конец файла (у меня проблем не было, но видел тех кому помогало).
Чего не так делаю.
Алиев Мурад, Так это же не команда, эту строчку надо прописать в файле /etc/crontab
Для удобства можно сначала установить файловый менеджер командой yum install mc
Потом открыть его командой mс и найти там нужный файл, нажать F4 и отредактировать его, прописав необходимую строку
Не могу понять, что делает флаг "agents_use_crontab"
1// Если мы выполняем COption::SetOptionString("main", "agents_use_crontab", "Y"), то на хитах остануться работать только периодические агенты (т.е. эта строка подключает крон для непериодических агентов?).
2// А если выполним COption::SetOptionString("main", "agents_use_crontab", "N"), то что. по смыслу ведь вроде получается наоборот: мы ОТКЛЮЧАЕМ, а не включаем использование крона.
Влад Седой , всё верно. $agents_use_crontab - неудачное, непонятное название опции. Влияет на то, будет ли ли функция CheckAgents вызывать периодические или непериодические агенты. Почитайте статью Выполнение всех агентов на cron. Чтобы почта была на хитах , я постарался разобраться с настройками.
Советую, чтобы не забивать себе голову, использовать модуль Агенты на крон е.
Добрый день, долго отрабатывала функция mail, думал, этот пост поможет, уже разобрался в чем дело, теперь интересует, если я все изменения убрал кроме:
Все хорошо, но внесите в шапку вариант когда все на cron - почта на хитах.
а то пока у пользователя еще сервер обработает, мое мнение что почта должна работать как можно быстрей
Опечатка в статье
bitrix/php_intarface/cron_events.phpможет всё-таки bitrix/php_interface/cron_events.php ?
письма приходят, если раскомментировать то SUCCESS_EXEC =F
Подскажите пожалуйста какие могут быть причины.
Сделал по инструкции, но какая-то ошибка мешает отправке. При ручном запуске команды:
/usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
на выходе html-код и ошибка
Fatal error: Class 'Bitrix\Mail\Message' not found in /home/bitrix/www/bitrix/modules/main/lib/mail/eventmessagethemecompiler.php(273) : eval()'d code on line 26
Не сталкивались?
потом нужно найти эти задания. Вопрос в том, какой файл крон использует. На моём "Битрикс:Веб-окружение - Linux" это был файл без расширения, с названием как имя пользователя (root или bitrix) в папке var/spool/cron/
И когда нашли, нужно изменить время срабатывания, а потом проверить, чтобы агенты стали отрабатывать через это время. Т.е. что действительно система реагирует на изменения этого файла.
Также про запись */5. Я лично долго искал, что значит "/5". Если написать "5", то это будет "5-я минута часа". Т.е."5 * * * * " означает в 00:05, 01:05 и т.д. А вот "*/5" означает каждую пятую минуту. Т.е. "*/5 * * * *" означает в 00:00, 00:05, 00:10 и т.д. Сама звёздочка означает "каждый, любой".
Помогите, сделано всё по вашей инсрукции
Алексей Паничев, у вас, наверное, используется шаблон письма, внутри которого вызов $APPLICATION->ShowHead(); При запуске шаблона из под крона, $APPLICATION неопределён. Добавьте в начало global $APPLICATION; и должно заработать.
Денис Коровкин, хотя, у вас немного другая проблема, но eval в классе всего один и он исполняет шаблон письма
Подскажите в чем может быть ошибка. Запускаю команду вручную, получаю:
Fatal error: Class 'CEvent' not found in /var/www/bitrix01/bitrix/modules/main/tools/cron_events.php on line 15
*/5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php |
Елена Пилюшенко, в /etc/crontab например
только синтаксис тогда нужен такой
*/5 * * * * bitrix /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
или создать(отредактировать) соответствующий файлик в /etc/cron.d/
Елена Пилюшенко, в папке /etc/ на сервере
в cron указал
*/5 * * * * /usr/bin/php -f /home/www/xn--24-dlchfbaxyor2bbo4kh.xn--p1ai/bitrix/php_interface/cron_events.php
при выполнении
Exited with return code = 127
или не нужно было менять путь до своего файла cron_events.php ?
Здравствуйте я получила ответ:
Syntax error: "(" unexpected
При проверке синтаксиса в онлайн ошибок не выдает
Спасибо, сделал всё как здесь описано. ан нет, не работает.
Оказалось, надо просто-напросто перезапустить Cron командой - service crond restart.
А бился ж пол дня, почему не описываете такие мелочи? Сюда же не только Гуру заходят.
Солдатов Игорь, похожу с обновлением есть изменения и этот прием с двумя "CAgent::CheckAgents();" не катит
попробуйте закоментировать первый //CAgent::CheckAgents();
п.с. кстати после того как я за комментировал, скрипт запустился и отработал, после чего я раскомментировал строку и все продолжило работать (только теперь уже корректно)
1С-Битрикс: Управление сайтом 17.5.4 Серв на centos, веб-окружение битрикс. Все завелось без проблем. Спасибо автору! |
Затем добавил в кронтаб в эту строчку:
*/5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
Как добавить в крон?
nano /etc/crontab
И вперед.
Царев Дмитрий, странно. На свежей виртуалке от битрикса нет файла crontab.
Он так и пишет: no crontab for foot
А при команде: nano /etc/crontab отвечает -bash: 0: command not found
Царев Дмитрий, установил модуль "Агенты на кроне" из маркетплейса.
В его настройках, внизу написано:
Настройка cron
cron — это программа на сервере, которая запускается раз в минуту и выполняет ваши команды в указанное время.
Для работы агентов на кроне необходимо настроить, чтобы стандартный файл Битрикса /bitrix/modules/main/tools/cron_events.php вызывался, например, раз в минуту.
В Виртуальной машине Битрикса ничего не надо делать, там уже есть соответствующая настройка для каждого сайта (файл /etc/crontab). На специализированных хостингах под Битрикс тоже могут быть заранее сделаны настройки.
У вас Виртуальная машина Битрикса версии 7.2.2.
На других хостингах в панели управления укажите что-то вроде:
* * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php
Вместо /usr/bin/php, у вас может быть другой путь. Узнайте у техподдержки вашего хостинга, как правильно настраивать крон, или найдите в часто задаваемых вопросах на сайте хостинга.
Важно. Настройка крона на вашем сервере — это обязанность администратора сервера или техподдержки хостинга. В обязанности разработчика модуля не входит.
_____________________
Может там и не надо ни чего настраивать.
Как вообще проверить отрабатывает ли агент на кроне?
Перейдя по адресу Настройки > Инструменты > Командная PHP-строка, выполните команду:
COption::SetOptionString("main", "agents_use_crontab", "Y");
echo COption::GetOptionString("main", "agents_use_crontab", "N");
Подтверждение «Y» означает, что выполняются только периодические хиты
Теперь на странице Настройки > Настройки продукта > Агенты настройте показ колонки Периодический. Выберите в ней почтовые агенты и проверьте, выставлены ли флаги «периодический». Если нет, поставьте флаги.
Добавьте в cron команду
/usr/bin/php -f /var/www/bitrix/modules/main/tools/cron_events.php
и установите почтовым агентам периодичность в 1 минуту в формате
2. Общее решение для запуска всех агентов из-под 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");
Теперь находим файл /bitrix/php_interface/dbconn.php
Убираем в нем определение двух переменных:
define("BX_CRONTAB_SUPPORT", true);
define("BX_CRONTAB", true);
и добавляем условие
$_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);
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 /home/bitrix/www/bitrix/php_interface/cron_events.php
3. Не забудьте увеличить количество обрабатываемых за раз событий
Открываем PHP-консоль Настройки > Инструменты > Командная PHP-строка и выполним команду
COption::SetOptionString("main", "mail_event_bulk", "20");
echo COption::GetOptionString("main", "mail_event_bulk", "5");
Выполнение всех агентов на cron. Чтобы почта была на хитах
Мы рассмотрели, какие бывают агенты . Теперь научимся их запускать на кроне. Мы сможем переложить часть задач с пользователей сайта на крон и ускорить время выполнения страниц.
Признаюсь. К этому снаряду я подходил несколько раз. И только с последнего толчка смог осилить этот вес. Сложность в том, что существует большое количество недокументированных констант и опций. Их совместное поведение совершенно не очевидно.
- BX_CRONTAB
- BX_CRONTAB_SUPPORT
- NO_AGENT_CHECK
- DisableEventsCheck
- agents_use_crontab - по умолчанию не задана
- check_agents - по умолчанию не задана
Нам надо повесить все агенты на крон.
Была подобная статья и учебный курс , но там есть фатальный недостаток : все почтовые события тоже вешаются на крон. Крон работает с минимальной частотой раз в минуту. Получается, что пользователь нажимает «восстановить пароль» и минуту ждет письмо. Еще один недостаток — статья устарела и в ней нет, как настроить резервное копирование по расписанию.
Нам надо, чтобы отправка писем была на хитах, а все агенты и резервное копирование работали на кроне.
Посмотрим, как сейчас обстоят дела в Битриксе:
По умолчанию на кроне вызывается файл /bitrix/modules/main/tools/cron_events.php:
В файле в самом начале стоит define("BX_CRONTAB", true);. Из-за этого в прологе устанавливается другая константа define("BX_CRONTAB_SUPPORT", true);. В результате данный крон-скрипт обрабатывает ТОЛЬКО непериодические агенты.
Исходный код функции обработки агентов.
Настройка агентов на кроне:
Установите опцию, которая запрещает выполнение агента в прологе:
Опция, которая влияет на выбор агентов в функции CheckAgents, должна быть не определена или "N".
Свой крон-скрипт:
Создайте файл /bitrix/php_interface/cron_events.php:
Пропишите правило в крон, например
* * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
Теперь должно работать. Все агенты периодические и непериодические запускаются на cron. Все почтовые события отправляются на хитах пользователей сразу. Если к отправке письма привязана отправка SMS, то SMS тоже отправится сразу и не будет ждать крона.
Решение вполне рабочее, но есть проблемы:
1. Свой файл /bitrix/php_interface/cron_events.php, как и в старой статье , не будет обновляться.
Битрикс уже добавлял в крон резервное копирование по расписанию. Если они еще что-то добавят, то у вас не появится новый функционал.
2. В Виртуальной машине Битрикса уже настроен крон для файла /bitrix/modules/main/tools/cron_events.php. Вам придется настроить крон на свой файл /bitrix/php_interface/cron_events.php
Мы написали свой модуль « Агенты на кроне », который очень прост, удобен и лишен этих недостатков.
Читайте также: