You are here: Home » Инструкции » Настройка cron в Arch Linux / BlackArch

Настройка cron в Arch Linux / BlackArch

cron в Arch Linux / BlackArch

cron – это планировщик заданий на основе времени на Unix-подобных операционных системах. cron даёт возможность пользователям настроить работы по расписанию (команды или шелл-скрипты) для периодичного запуска в определённое время или даты. Обычно это используется для автоматизации обслуживания системы или администрирования.

Имеется много реализаций cron, но ни одна из них не установлена по умолчанию.

Доступные пакеты:

  • cronie
  • fcron
  • bcron
  • dcron
  • vixie-cron
  • scron-git

cronie и fcron доступны в стандартном репозитории, а остальные – в AUR.

Установка cronie

Рассмотрим, как настроить планировщик задач на примере cronie. Установим:

sudo pacman -S cronie pm-utils smtp-server smtp-forwarder --needed

Опции cronie

Использование:

 crontab [опции] файл
 crontab [опции]
 crontab -n [имя хоста]

Опции:

 -u <пользователь>  определить пользователя
 -e         отредактировать пользовательский crontab
 -l         показать список пользовательского crontab
 -r         удалить пользовательский crontab
 -i         запрос перед удалением
 -n <хост>  установить хост в кластере для запуска пользовательских crontab
 -c         получить хост в кластере для запуска пользовательских crontab
 -x <mask>  включить отладку

Т.е. для редактирования списка задач текущего пользователя:

crontab -e

Для отображения списка задач текущего пользователя:

crontab -l

Изменение текстового редактора по умолчанию для crontab на vim

Команда crontab -e проверит переменные окружения $EDITOR и $VISUAL, поэтому для перезаписи текстового редактора по умолчанию:

export VISUAL=vim

или

export EDITOR=vim

Для того, чтобы изменения стали постоянными, добавьте в ваш ~/.bashrc:

export EDITOR=vim

Правила составления файла cron

Файл cron может содержать переменные окружения и строки, определяющие время запуска и команду, необходимую запустить.

Давайте рассмотрим пример файла:

       # использовать /bin/sh для запуска команд, не зависимо от того, что говорит /etc/passwd 
       SHELL=/bin/sh
       # отправлять посьма к 'paul', не зависимо от того, чей это crontab 
       MAILTO=paul
       # Установить временную зону Японии
       CRON_TZ=Japan
       # запускать через 5 минут после полуночи, каждый день
       5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
       # запускать в 14:15 первого числа каждого месяца – выпод отправляется к paul
       15 14 1 * *     $HOME/bin/monthly
       # запускать в 22 часа в рабочие дни, надоедать Joe
       0 22 * * 1-5    mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
       23 0-23/2 * * * echo "запускать на 23 минуте после полуночи, в 2, 4 ... часов, каждый день"
       5 4 * * sun     echo "запуск в 04:05 каждое воскресенье"

Итак, в каждом новом расписании присутствуют пять полей:

  • минуты (0-59)
  • часы (0-23)
  • дни месяца (1-31)
  • месяц (1-12)
  • день недели (0-7)

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

После времени указывается файл для выполнения.

Поле может содержать звёздочку (*), что всегда означает «от первого до последнего», т.е. соответствует всем временным интервалам данного поля.

Разрешены диапазоны цифр, диапазоны двух цифр разделены тире. Диапазоны являются включающими. Например 8-11 для поля «часы» означает выполнение в 8, 9, 10 и 11 часов.

Списки разрешены. Списки – это набор чисел или диапазонов, разделённый запятыми. Примеры: "1,2,5,9", "0-4,8-12".

Значения с определённым шагом могут использоваться с диапазонами или следовать за звёздочкой. Если используется запись вида "*/N", то это означает запускать каждый N-й раз. Например, "*/2" в поле «часы» означает запускать каждый второй час, "*/15" в поле «минуты» - каждые пятнадцать минут (один раз в пятнадцать минут).

Если за диапазоном следует "/N", это означает запускать каждый N-й раз для значений диапазона. Например, «1-59/2» для минут означает запускать каждую нечётную минуту.

Примеры расписаний cron

Каждую минуту:

* * * * *

Каждую 1 минуту:

* * * * *

Каждые 2 минуты:

*/2 * * * *

Каждую чётную минуту:

*/2 * * * *

Каждую нечётную минуту:

1-59/2 * * * *

Каждые 3 минуты:

*/3 * * * *

Каждые 4 минуты:

*/4 * * * *

Каждые 5 минут:

*/5 * * * *

Каждые пять минут:

*/5 * * * *

Каждые 6 минут:

*/6 * * * *

Каждые 10 минут:

*/10 * * * *

Каждые десять минут:

*/10 * * * *

Каждую четверть часа:

*/15 * * * *

Каждые 20 минут:

*/20 * * * *

Каждые 30 минут:

*/30 * * * *

Каждый час в 30 минут:

*/30 * * * *

Каждые полчаса:

*/30 * * * *

Каждые 60 минут:

0 * * * *

Каждый час:

0 * * * *

Каждый 1 час:

0 * * * *

Каждые 2 часа:

0 */2 * * *

Каждые два часа:

0 */2 * * *

Каждый чётный час:

0 */2 * * *

Каждый другой час:

0 */2 * * *

Каждые 3 часа:

0 */3 * * *

Каждые три часа:

0 */3 * * *

Каждые 4 часа:

0 */4 * * *

Каждые 6 часов:

0 */6 * * *

Каждые шесть часов:

0 */6 * * *

Каждые 8 часов:

0 */8 * * *

Каждые 12 часов:

0 */12 * * *

Каждый день:

0 0 * * *

Каждую ночь:

0 0 * * *

Каждую ночь в 1 час:

0 1 * * *

Каждый ночь в 2 часа:

0 2 * * *

Каждый день в 8 часов:

0 8 * * *

Каждое утро:

0 9 * * *

Каждую полночь:

0 0 * * *

Каждый день в полночь:

0 0 * * *

Каждую ночь в полночь:

0 0 * * *

Каждое воскресенье:

0 0 * * SUN

Каждый понедельник:

0 0 * * MON

Каждый вторник:

0 0 * * TUE

Каждую среду:

0 0 * * WED

Каждый четверг:

0 0 * * THU

Каждую пятницу:

0 0 * * FRI

Каждую пятницу в полночь:

0 0 * * FRI

Каждую субботу:

0 0 * * SAT

Каждый рабочий день:

0 0 * * 1-5

Каждые 7 дней:

0 0 * * 0

Каждую неделю:

0 0 * * 0

Каждый месяц:

0 0 1 * *

Каждый другой месяц:

0 0 1 */2 *

Каждый квартал:

0 0 1 */3 *

Каждые 6 месяцев:

0 0 1 */6 *

Каждый год:

0 0 1 1 *

Отключение уведомлений по почте от Crontab на Linux и Unix-подобных системах

В этом разделе будут даны ответы на вопросы: как отключить уведомления по почте, которые рассылает crontab? Кому и при каких условиях задачи, когда они запускаются и не могут нормально выполниться, отправляют письма. Почему я получаю e-mail на мой аккаунт root от cron? Как предотвратить это? Как я могу отключить предупреждения по имейлу, отправляемые задачами cron на Linux или Unix-подобных системах?

По умолчанию, любой вывод команд или скрипта (если он имеется) инициализируют отправку электронного письма на ваш локальный email аккаунт. Для прекращения получения вывода из crontab вам нужно добавить следующие строки к каждой записи crontab.

Отключение отправки ошибок и вывода от задач cron

Для предотвращения отправки ошибок и вывода, добавьте любую из следующих строк в конец каждой задачи cron для перенаправления вывода в /dev/null.

>/dev/null 2>&1

ИЛИ

> /dev/null

ИЛИ

> /dev/null 2>&1 || true

Примеры задач cron

Отредактируйте/откройте ваши задачи cron, для этого наберите:

crontab -e

Добавьте строку >/dev/null 2>&1 для прекращения предупреждений по почте:

0 1 5 10 * /path/to/script.sh >/dev/null 2>&1

ИЛИ

0 1 5 10 * /path/to/script.sh > /dev/null

ИЛИ

0 * * * * /path/to/command arg1 > /dev/null 2>&1 || true

Сохраните и закройте файл.

Установка переменной MAILTO

Вы можете установить переменнюу MAILTO="" в начале вашего файла crontab. Это также отключит предупреждения по почте. Отредактируйте/откройте ваш файл с задачами cron:

crontab -e

В самый верх этого файла добавьте:

MAILTO=""

Сохраните и закройте файл.

Переменные окружения в файле cron

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

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

Некоторые переменные окружения устанавливаются автоматически демоном cron(8).

SHELL устанавливается на /bin/sh

LOGNAME и HOME берутся из строки /etc/passwd владельца crontab.

HOME и SHELL можно переписать настройками в crontab; LOGNAME – нельзя.

При необходимости отправить письмо, cron(8) обращается к переменной MAILTO. Если MAILTO задана (и не является пустой), то письмо отправляется на указанный адрес. Если MAILTO определена, но является пустой (MAILTO=""), то письма не отправляются. В противном случае письма отправляются владельцу crontab.

Если MAILFROM указана и не является пустой, она используется для обёртки адреса отправителя, в противном случае используется "root''.

По умолчанию cron отправляет письмо используя заголовок 'Content-Type:' со значением 'text/plain' с параметром 'charset=' установленным на 'charmap/codeset' локали, в которой запущен crond(8), или дефолтной системной локалью. Т.е. или дофолтная системная локаль, если переменные окружения LC_* не настроены, или локаль указаная переменными окружения LC_* (смотри locale(7)). 

Различные кодировки вывода задач cron настраиваются переменными CONTENT_TYPE и CONTENT_TRANSFER_ENCODING в crontab, им должны быть присвоены корректные значения почтовых заголовков этих имён.

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

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

Переменная окружения RANDOM_DELAY позволяет делать задержку запуска задач на случайное количество минут, верхний предел количества которых устанавливается этой переменной. Случайный коэффициент масштабирования определяется при запуске демона cron, поэтому остаётся постоянным во всё время работы демона.

Запуск и добавление в автозагрузку cron в Arch Linux / BlackArch

sudo systemctl start cronie.service
sudo systemctl enable cronie.service

Удаление из автозагрукзи

sudo systemctl disable cronie.service

Небольшие подсказки

Не используйте @reboot, поскольку с этим указателем имеется слишком много проблем.

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

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

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