Что такое cron в битрикс
Перейти к содержимому

Что такое cron в битрикс

  • автор:

Авто-запуск Бизнес-Процессов по расписанию (Cron)

Оформите подписку Битрикс24 Маркет Плюс и используйте более 3000 полезных приложений, представленных в каталоге.

Авто-запуск Бизнес-Процессов по расписанию (Cron)

АйТи-Солюшн

Установить

Информация

Опубликовано : 17.06.2021

Установок : 395

Другие приложения разработчика

Все телефоны в одном формате

По подписке

Курсы валют

По подписке

База знаний и тестирование

Планировщик задач cron для виртуальной машины 1C-Битрикс (bitrix vm)

Для выполнения «тяжелых» агентов или иных задач (например: пересчет характеристик товаров, выгрузок в xml и т.д.), занимающих длительное время, необходимо использовать планировщик задач cron для linux (в случае виртуальной машины битрикс — это планировщик cron для системы CentOS).

Как сообщает Википедия, планировщик задач cron — это классический демон (компьютерная программа в системах класса UNIX), использующийся для периодического выполнения заданий в определённое время.

Настройка задач выполняется через команду crontab. Напомню, что в виртуальной машине битрикс после установки доступно два пользователя linux: суперпользователь root и пользователь bitrix с ограниченными правами, под которым работает веб-сервер.

Поэтому крайне важно во избежание проблем с правами устанавливать cron-задачи сайтов для пользователя bitrix. Либо воспользоваться советом ниже, используя команду sudo.

Просмотр списка задач пользователя bitrix

Авторизуемся под root к серверу по ssh, выполняем команду:

crontab -l -u bitrix

Список задач текущего авторизованного в систему пользователя (при авторизации под root будут показаны задачи суперпользователя):

crontab -l

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

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

Редактирование задач пользователя bitrix

Авторизуемся под root к серверу по ssh, выполняем команду:

crontab -u bitrix -e

Данные команда открывает в редакторе специальный текстовый файл в текстовом редакторе vi. Если задачи еще не ставились — он будет пустой.

Важно отметить, что редактор vi работает в двух режимах: в режиме команд и режиме вставки. Чтобы перейти к редактированию текста (режим вставки) необходимо нажать клавишу [i] (insert). Выход из режима редактирования осуществляется клавишей [Esc]. В режиме команд, в статусную строку вводится команда, обычно она начинается с ввода двоеточия. Полезные команды две:

1/ :wq[ENTER] — выйти с сохранением файла
2/ :q! — выход без сохранения файла

Также в режиме команд можно вырезать строку, на которой установлен курсор, через нажатие dd . Для вставки вырезанной строки в указанное курсором место нужно нажать p .

В шапку crontab-файла я рекомендую вставлять комментарий со справкой и сразу покажем пример, как установить выполнение агентов для крон, например, меняем планировщик командой crontab -u bitrix -e со следующим содержимым:

MAILTO="admin1@mail.com,admin2@mail.com"
#
# m h dom mon dow command
#

* * * * * php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php

# если на площадке несколько сайтов и один из них в cp1251,
# а глобально настройки PHP для UTF, то нужно вот так
# переопределить php-ini директивы:

* * * * * php -f -d "mbstring.func_overload"=0 -d "mbstring.internal_encoding"=CP1251 /home/bitrix/ext_www/some_cp1251_site/bitrix/modules/main/tools/cron_events.php

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

systemctl restart crond.service

Отладка выполнения cron-скриптов

Для отслеживания вывода cron-задач и получение сообщений об ошибках необходимо указать ящики администраторов в служебной настройке MAILTO вверху файла настроек crontab (можно указать несколько ящиков через запятую).

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

*/5 * * * * php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1

В нашем примере видно, что команда направляет свой стандартный вывод в /dev/null (псевдоустройство, которое может принять произвольный объём данных, не сохраняя их совершенно нигде, следовательно, подавив стандартный вывод). Затем все ошибки (то есть STDERR=2) перенаправить в стандартный вывод. Необходимо поставить амперсанд «&» перед номером назначения (STDOUT=1).

Лог выполнения планировщика crond находится в файле /var/log/cron.

Используем редактор nano вместо vi при редактировании cron-задач

Для того, чтобы использовать более современный текстовый редактор nano, необходимо его установить ( yum -y install nano ), а также указать глобальную переменную окружения:

export VISUAL=nano;

Чтобы вернуться к редактированию crontab через vi нужно поменять значение этой переменной:

export VISUAL=vim;

Организация резервной копии задач

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

1/ авторизуемся под root к серверу по ssh
2/ выполняем crontab -e
3/ ставим задачу для пользователя root, ежедневно в 3 ночи сохраняющую задачи пользователя bitrix в файл /home/bitrix/crontab_save.txt

MAILTO="admin1@mail.com,admin2@mail.com"
#
# m h dom mon dow command
#
0 3 * * * crontab -l -u bitrix > /home/bitrix/crontab_save.txt

4/ осталось организовать ежедневное сохранение файла /home/bitrix/crontab_save.txt в свои бекапы настроек сервера. Можно также написать php-скрипт, установленный в крон для root, который будет хранить, например, 3 последние версии данного файла. Это не сложная задача и легко реализуется. Мы у себя сохраняем ежедневно папку /etc и файл /home/bitrix/crontab_save.txt по которому можно в случае ошибки восстановить утерянные cron-задачи.

Когда cron-задачи пользователя bitrix могут сброситься?

В случае если на вашем выделенном сервере с машиной битрикс установлены несколько сайтов со своими отдельными ядрами, каждое ядро содержит свой файл /bitrix/crontab/crontab.cfg

А страница экспорта каждого ядра при этом предлагает установить свои задачи:

Поэтому в файл crontab на вашем сервере надо вносить общий объединенный файл из всех файлов сайтов /bitrix/crontab/crontab.cfg у вас на площадке.

Также крон задачи могут быть переопределены и даже очищены через маркетплейс решение. Например, модуль выгрузки на торговые порталы дописывает в случае необходимости свои задачи в конец crontab файла, не затирая уже установленные задачи. Напоминаю, что apache работает от пользователя bitrix и обладает всеми его привилегиями, т.е. через апатч, а именно функцию exec(‘crontab…’) модуля php апатча можно затереть все задачи пользователя bitrix.

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

Можно ли устанавливать все задачи только для пользователя root?

Это возможно, но не рекомендуется. Для этого можно воспользоваться следующей инструкцией:

1/ авторизуемся под root к серверу по ssh
2/ выполняем crontab -e, т.е. редактируем задачи суперпользователя-root
3/ Используем sudo чтобы php-скрипт выполнялся от пользователя bitrix:

MAILTO="admin1@mail.com,admin2@mail.com"
#
# m h dom mon dow command
#
0 3 * * * crontab -l -u bitrix > /home/bitrix/crontab_save.txt
* * * * * sudo -u bitrix php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1

Что такое cron

Cron (Command Run ON) — это планировщик задач на операционной системе Linux. Он запускает скрипты по расписанию. Это могут быть запуск создания резервной копии почтовых событий и др.

Как это работает: в административном разделе сайта на 1С-Битрикс расположен скрипт, планировщик хостинга запускает его работу с определенной командой и частотой.

Для создания задания на cron на панели управления виртуальным хостингом перейдите в Главное (1) → Планировщик (2). Нажмите «Создать задание» (3).

Если у вас виртуальный сервер, в панели управления выберите Планировщик CRON (1) и нажмите «Создать» (2).

Откроется вкладка с настройками нового задания. Введите:

  • Адрес e-mail — почтовый ящик, на который уходят уведомления о выполнении задания на cron. Если письма не нужны, поставьте галочку на последний пункт «Не отправлять отчет по e-mail».
  • Команда — расположение скрипта. Например, /var/www/user/data/www/вашдомен.ru/скрипт.php.

Далее укажите описание и расписание задания.

На CMS 1С-Битрикс используют технологию Агентов для запуска функций. Это запись в базе данных, которая содержит информацию о запуске задания в определенное время.

По умолчанию агенты запускаются по событиям. Их переводят на cron для работы по расписанию. Воспользуйтесь инструкцией Справочного центра для перевода агентов на cron.

Есть вопрос?

На все вопросы о хостинге ответим по любому из способов связи:

  • через личный кабинет,
  • по почте support@reddock.ru,
  • по телефону +7 (495) 008-31-24 или +7 (351) 225-64-56.

Начните мощную работу вместе с Reddock – заполните форму заказа услуги, и мы свяжемся с вами в ближайшее время!

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

В этой статье мы расскажем, что такое агенты, а также как работает выполнение агентов на Cron в Bitrix.

Что такое агенты

Агенты — это функционал CMS Bitrix, с помощью которого можно запускать функции PHP с заданным промежутком времени. Этот функционал представлен как запись в базе данных. Каждая запись содержит:

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

Как работают агенты

Чтобы понять, как работают агенты в Bitrix, нужно разобраться, что такое хит и Cron-задания. Есть два алгоритма для запуска агентов:

  • Хиты. Хит — это одна загрузка страницы. Когда пользователь заходит на страницу или кликает по ссылке, в CMS создаётся хит. Также он создаётся, если пользователь перезагружает страницу или переходит на несуществующую страницу. Каждый раз, когда создается хит, Bitrix обращается ко всем агентам. CMS выполняет их, если закончился заданный промежуток времени;
  • Cron-задания. Такие задания тоже выполняются с заданной периодичностью, но не зависят от хитов. Подробнее о работе Cron-заданий читайте в статье Планировщик Cron.

Если агент выполняется более 10 секунд, страницы сайта будут долго открываться. Поэтому иногда возникает потребность перевести их с хитов на Cron. Это позволит разгрузить CMS и ускорить загрузку страниц.

Как перевести агенты на Cron

Оптимальный вариант перевода агентов на Cron — модуль «Агенты на кроне». Его плюс в том, что на Cron переносятся все агенты, кроме почтовых. Это значит, что почта продолжит работать без задержек и дополнительных настроек.

Чтобы установить модуль:

перевести агенты на cron 1

Перейдите на вкладку Администрирование:

перевести агенты на cron 2

Выберите MarketplaceКаталог решений: Cron events

перевести агенты на cron 3

В поисковой строке наберите «Агенты на кроне» и нажмите Enter. Затем найдите модуль на странице и нажмите Установить:

перевести агенты на cron 4

Отметьте модуль галочкой и кликните Загрузить:

перевести агенты на cron 5

Примите лицензионное соглашение и условия конфиденциальности. После этого нажмите Применить:

перевести агенты на cron 6

Перейдите на вкладку Установка обновлений и нажмите Установить:

перевести агенты на cron 7

Если установка прошла корректно, вы увидите сообщение:

перевести агенты на cron 8

Выберите блок Настройки. Затем перейдите в раздел Настройки продуктаНастройки модулей:

перевести агенты на cron 9

Выберите модуль Агенты на кроне из выпадающего списка. Отметьте пункт «Все агенты выполняются на кроне, а на хитах пользователей не выполняются». Затем нажмите Сохранить:

После установки модуля необходимо выполнить настройку агентов на Cron. Для этого:

Подключитесь к хостингу или серверу по SSH.
Откройте файл dbconn.php. Для этого выполните одну из команд:

sudo nano ~/domain.ru/bitrix/php_interface/dbconn.php vi ~/domain.ru/bitrix/php_interface/dbconn.php

Вместо ~/domain.ru/ укажите путь к корневой директории сайта.
Добавьте строку:

define('BX_CRONTAB_SUPPORT', true);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *