Red Hat System Administration II 8.2
Задачи
После завершения этого раздела вы сможете запланировать выполнение команд по повторяющемуся расписанию с помощью пользовательского файла crontab.
Повторяющиеся пользовательские задания
Задания, запланированные для многократного выполнения, называются повторяющимися заданиями. Системы Red Hat Enterprise Linux поставляются с демоном crond в пакете cronie, который включается и запускается по умолчанию специально для повторяющихся заданий. Демон crond считывает несколько файлов конфигурации, по одному на пользователя (отредактировать их можно с помощью команды crontab), и набор системных файлов. Эти файлы конфигурации позволяют пользователям и администраторам контролировать время выполнения повторяющихся заданий.
Если поток вывода или поток ошибок запланированной команды не перенаправляется, демон crond пытается отправить этот вывод или ошибку по электронной почте пользователю, которому принадлежит это задание (если этот параметр не переопределен), используя настроенный в системе почтовый сервер. В зависимости от среды может потребоваться дополнительная настройка. Поток вывода и поток ошибок запланированной команды можно направить в разные файлы.
Планирование повторяющихся пользовательских заданий
Обычные пользователи могут управлять заданиями с помощью команды crontab. Ее можно вызывать четырьмя способами.
Таблица 2.1. Примеры использования команды crontab
| Команда | Назначение |
|---|---|
| crontab -l |
Отображение заданий текущего пользователя. |
| crontab -r |
Удаление всех заданий текущего пользователя. |
| crontab -e |
Изменение заданий текущего пользователя. |
crontab filename |
Удаление всех заданий и их замена заданиями из файла |
Примечание
Привилегированный пользователь может использовать опцию -u с командой crontab для управления заданиями другого пользователя. Не используйте команду crontab для управления системными заданиями. Вместо этого применяйте методы, описанные в следующем разделе.
Формат пользовательского задания
Команда crontab -e по умолчанию вызывает редактор Vim, если в переменной среды EDITOR не было указано что-то другое. Вводите по одному заданию на строку. Другие допустимые записи: пустые строки (обычно для удобства чтения), комментарии, начинающиеся с символа решетки (#), переменные среды в формате ИМЯ=значение, которые действует для всех строк ниже объявления переменной. К наиболее часто используемым переменным относятся: переменная SHELL, объявляющая оболочку для интерпретации оставшихся строк файла crontab, и переменная MAILTO, определяющая получателя вывода по электронной почте.
Важно
Для отправки почты может потребоваться дополнительная настройка локального почтового сервера или ретранслятора.
Поля в файле crontab отображаются в следующем порядке:
Minutes (минуты)
Hours (часы)
Day of month (день месяца)
Month (месяц)
Day of week (день недели)
Команда
Важно
Если значения в полях Day of Month и Day of Week отличаются от *, команда выполняется, когда любое из этих полей удовлетворяет условиям. Например, чтобы команда выполнялась 15-го числа каждого месяца и каждую пятницу в 12:15, используйте следующий формат задания:
15 12 15 * Fri commandПервые пять полей используют одинаковые синтаксические правила:
*для «неважно»/всегда.Число для обозначения минут или часов, даты или дня недели. Для дней недели
0означает воскресенье,1— понедельник,2— вторник и т. д.7также означает воскресенье.x-yдля диапазона отxдоyвключительно.x,yдля списков. Списки также могут содержать диапазоны. Например,5,10-13,17в столбцеMinutesуказывает, что задание должно выполняться через 5, 10, 11, 12, 13 и 17 минут после начала часа.*/xдля обозначения интервалаx. Например,*/7в столбцеMinutesбудет запускать задание каждые семь минут.
Кроме того, для месяцев и дней недели можно использовать трехбуквенные английские сокращения, например Jan, Feb и Mon, Tue.
Последнее поле содержит команду, которая должна быть выполнена с использованием командной оболочки по умолчанию. Можно использовать переменную среды SHELL, чтобы изменить оболочку для запланированной команды. Если команда содержит неэкранированный символ процента (%), он будет считаться символом новой строки, а все данные после него будут переданы команде в stdin.
Пример повторяющихся пользовательских заданий
В этом разделе приведено несколько примеров повторяющихся заданий.
Следующее задание выполняет команду /usr/local/bin/yearly_backup ежегодно 2 февраля ровно в 9:00.
0 9 2 2 * /usr/local/bin/yearly_backup
Следующее задание отправляет сообщение электронной почты, содержащее слово
Chime, владельцу этого задания каждые пять минут с 9:00 до 17:00 каждую пятницу в июле.*/5 9-16 * Jul 5 echo "Chime"
Вышеуказанный диапазон часов
9-16означает, что таймер задания запускается с девятого часа (09:00) и выполняется до конца шестнадцатого часа (16:59). Задание начинает выполняться в09:00с последним исполнением в16:55, поскольку через пять минут после16:55уже будет17:00, что выходит за рамки указанного диапазона часов.Следующее задание выполняет команду /usr/local/bin/daily_report каждый будний день за две минуты до полуночи.
58 23 * * 1-5 /usr/local/bin/daily_report
Следующее задание выполняет команду mutt для отправки электронного письма
Checking inполучателюboss@example.comкаждый рабочий день (c понедельника по пятницу) в 9:00.0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi there boss, just checking in.
Ссылки
Man-страницы crond(8), crontab(1) и crontab(5)