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 имеются абсолютные пути, будьте внимательны, поскольку это может привести к ошибке в скрипте и, в как причина, отсутствие результата выполнения.
Близкие статьи
- Настройка SSH в BlackArch (81.5%)
- Установка MongoDB в BlackArch (81.5%)
- Установка LAMP (Linux, Apache, MySQL/MariaDB, PHP8 и phpMyAdmin) в Arch Linux / BlackArch (81.5%)
- Настройка статического IP адреса в Arch Linux / BlackArch (81.5%)
- Как настроить свой собственный почтовый сервер на Arch Linux (81.5%)
- Работа с дисками при установке BlackArch (Arch): общая информация, конвертация и разметка MBR и GPT; общая информация и установка GRUB и EFI (RANDOM - 18.6%)