+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Для выполнения «тяжелых» агентов или иных задач (например: пересчет характеристик товаров, выгрузок в 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;
редактирование задач cron через редактор 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




Назад в раздел

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












CAPTCHA