Настройка cron 1с битрикс

Обновлено: 07.07.2024

По умолчанию, в Битриксе агенты выполняются на хитах, то есть при каждом посещении сайта пользователем. Когда пользователь кликает по страницам, Битрикс проверяет, какие агенты уже пора стартануть и выполняет их. У этого способа есть недостатки: нерегулярность запуска всего, что нужно и второй недостаток: конкретные тормоза при нагруженных агентах. Недостатки можно исключить, если запускать агенты с помощью cron.

Перво-наперво все почтовые события вешаются на cron. Он работает с минимальной частотой раз в минуту. Но есть и минусы, получается, что пользователь нажимает «восстановить пароль» и минуту ждет письмо. Еще один недостаток — резервное копирование по расписанию.

Но в целом, серверное выполнение по крону более правильное. Переходим к настройкам.

Чтобы выполнять агенты через крон нужно открыть консоль PHP , находящуюся в Настройки>Инструменты>Командная строка PHP и выполнить команду

1. Запустите выполнение периодических агентов

Перейдя по адресу Настройки > Инструменты > Командная PHP-строка, выполните команду:

Подтверждение «Y» означает, что выполняются только периодические хиты

Теперь на странице Настройки > Настройки продукта > Агенты настройте показ колонки Периодический. Выберите в ней почтовые агенты и проверьте, выставлены ли флаги «периодический». Если нет, поставьте флаги.

Добавьте в cron команду

и установите почтовым агентам периодичность в 1 минуту в формате

2. Общее решение для запуска всех агентов из-под cron

Начнем с того, что полностью отключим все агенты на хите. Для этого в PHP-консоли Настройки > Инструменты > Командная PHP-строка выполним команду

Теперь находим файл:

Убираем в нем определение двух переменных:

и добавляем условие

И добавляем этот скрипт в cron:

3. Не забудьте увеличить количество обрабатываемых за раз событий

Открываем PHP-консоль Настройки > Инструменты > Командная PHP-строка и выполним команду

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

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

  • 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

askaron_agents_marketplace.jpg

Мы написали свой модуль « Агенты на кроне », который очень прост, удобен и лишен этих недостатков.

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

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


В результате выполнения должно быть "NN".
После этого убираем из файла /bitrix/php_interface/dbconn.php определение следующих констант:

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


Обновлено:
- 10.09.2015 - Изменен скрипт запуска агента
- 22.03.2018 - Изменен скрипт для лучшей совместимости с push&pull
- 14.01.2020 - Уменьшено время между запусками агента
Опечатка в статье
bitrix/php_intarface/cron_events.phpможет всё-таки bitrix/php_interface/cron_events.php ? Странно почему когда комментирую строку в /bitrix/php_interface/dbconn.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 И добавляем данный скрипт в cron
*/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
При проверке синтаксиса в онлайн ошибок не выдает Юрий Авдеев, выставите short_open_tag в On для cli-режима. Тут писал Спасибо, сделал всё как здесь описано. ан нет, не работает.
Оказалось, надо просто-напросто перезапустить 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, у вас может быть другой путь. Узнайте у техподдержки вашего хостинга, как правильно настраивать крон, или найдите в часто задаваемых вопросах на сайте хостинга.

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

_____________________

:facepalm:

Может там и не надо ни чего настраивать.
Как вообще проверить отрабатывает ли агент на кроне?

Цитатник веб-разработчиков В тексте курса вы встретите цитаты, высказанные в разное время разработчиками системы и разработчиками проектов на базе 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
    обновляются периодически, поэтому возможно некоторое отставание их от онлайновой версии курса.

    Перейдя по адресу Настройки > Инструменты > Командная 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");


    Теперь находим файл /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);

    <?
    $_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");

    Читайте также: