Cron — один из часто используемых инструментов для Unix-систем. Его используют для планирования выполнения команд на определённое время. Эти «отложенные» команды или задания принято называть «Cron Jobs». Такой инструмент отлично подходит для регулярных бэкапов, мониторинга дискового пространства, удаления файлов (например, логов) и много чего ещё. В этой статье будет рассказано о работе с Cron на Linux.
Введение
Шаблон задания для Cron выглядит примерно так:
Минуты(0-59) Часы(0-24) День(1-31) Месяц(1-12) День недели(0-6) Команда
Вот иллюстрация этого же шаблона, которую можно сохранить себе:
Звёздочками обозначены конкретные блоки времени.
Для отображения содержимого crontab-файла текущего пользователя используйте команду:
$ crontab -l
Для редактирования заданий пользователя есть команда:
$ crontab -e
Если эта команда выполняется в первый раз, вам предложат выбрать редактор для Cron:
no crontab for sk - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- простейший 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]:
Выбирайте на своё усмотрение.
В этом файле как раз нужно перечислять одну за другой все команды.
Чтобы изменить crontab-файл другого пользователя (например, ostechnix):
$ crontab -u ostechnix -e
Ниже приведены несколько примеров cron-заданий:
- Чтобы выполнять команду каждую минуту, задание должно быть такое:
* * * * * <исполняемая-команда>
- Похожее задание, только команда будет вызываться каждые пять минут:
*/5 * * * * <исполняемая-команда>
- Вызывать команду 4 раза в час (каждые 15 минут):
*/15 * * * * <исполняемая-команда>
- Чтобы выполнить команду каждый час в 30 минут, пишем:
30 * * * * <исполняемая-команда>
Т. е. команда будет выполняться не каждые 30 минут, а тогда, когда значение минут будет равно 30 (например, 10:30, 11:30, 12:30 и т. д.).
- Значения времени можно комбинировать, перечислив их через запятую. Следующий код будет выполнять команду три раза в час: в 0, 5 и 10 минут.
0,5,10 * * * * <исполняемая-команда>
- Выполнять команду каждый час будет следующее задание:
0 * * * * <исполняемая-команда>
- Выполнение команды каждые два часа:
0 */2 * * * <исполняемая-команда>
- Чтобы выполнять команду каждый день (в 00:00):
0 0 * * * <исполняемая-команда>
- Выполнение команды каждый день в 03:00:
0 3 * * * <исполняемая-команда>
- Выполнение команды каждое воскресенье (sunday):
0 0 * * SUN <исполняемая-команда>
- Другой вариант задания, которое будет выполнять команду каждое воскресенье (естественно, тоже в 00:00):
0 0 * * 0 <исполняемая-команда>
- Выполнение команды каждый день с понедельника по пятницу:
0 0 * * 1-5 <исполняемая-команда>
- Следующее задание будет выполнять команду каждый месяц, 1-го числа в 00:00:
0 0 1 * * <исполняемая-команда>
- Выполнять команду в 16:15 каждого первого числа месяца будет это задание:
15 16 1 * * <исполняемая-команда>
- Выполнение команды каждые три месяца:
0 0 1 */3 * <исполняемая-команда>
- Выполнение команды в строго определённое время и месяц:
5 0 * 4 * <исполняемая-команда>
- Задание будет вызывать команду в начале каждого полугодия (в 00:00 1-го дня):
0 0 1 */6 * <исполняемая-команда>
- Выполнение команды каждый год 1-го января в 00:00:
0 0 1 1 * <исполняемая-команда>
Ещё существуют готовые задания:
@reboot
— одиночное выполнение команды при загрузке;@yearly
— раз в год;@annually
— тоже раз в год;@monthly
— раз в месяц;@weekly
— один раз в неделю;@daily
— раз в день;@midnight
— тоже раз в день;@hourly
— раз в час.
Чтобы выполнять команду каждый раз после перезапуска сервера, используйте это задание:
@reboot <исполняемая-команда>
Команда для очистки всех заданий текущего пользователя:
$ crontab -r
Чтобы узнать о подробностях, есть команда:
$ man crontab
Вышеперечисленного уже должно хватить для базовой работы с Cron и составления заданий.
Синтаксис crontab-генераторов
Процесс написания заданий сильно упрощают веб-инструменты. Они не требуют знаний синтаксиса Cron, потому что у них графический интерфейс, а задания генерируются в соответствии с вводимыми данными. Сайт генерирует задание, которое можно будет просто скопировать и вставить в crontab-файл.
Crontab.guru
На сайте есть разделы, посвящённые
Crontag Generator
Помимо этого, есть веб-инструмент «Crontab UI», который обеспечивает не только простоту создания crontab-заданий, но и безопасность. Вот
Перевод статьи
Респект и уважуха