1. Обзор
Проще говоря, cron — это базовая утилита, доступная в системах на базе Unix. Это позволяет пользователям планировать задачи для периодического запуска в указанную дату/время. И, естественно, это отличный инструмент для автоматизации многих процессов, которые в противном случае потребовали бы вмешательства человека.
Cron работает как демон. Это означает, что его нужно запустить только один раз, и он будет продолжать работать в фоновом режиме. Этот процесс использует crontab
для чтения записей расписаний и запуска задач.
Со временем формат выражения cron получил широкое распространение , и многие другие программы и библиотеки используют его.
2. Работа с Кронтабом
Расписание cron
— это простой текстовый файл, расположенный в /var/spool/cron/crontabs
в системах Linux. Мы не можем редактировать файлы crontab
напрямую , поэтому нам нужно получить к ним доступ с помощью команды crontab
.
Чтобы открыть файл crontab
, нам нужно запустить эту команду:
crontab -e
Каждая строка в crontab
— это запись с выражением и командой для запуска:
* * * * * /usr/local/ispconfig/server/server.sh
Эта запись запускает упомянутый скрипт каждую минуту.
3. Выражение Крона
Давайте разберемся с выражением cron .
Он состоит из пяти полей:
<minute> <hour> <day-of-month> <month> <day-of-week> <command>
3.1. Специальные символы в выражении
- * (все) указывает, что событие должно происходить в каждую единицу времени. Например, «*» в поле <
minute>
означает «за каждую минуту». - ? (любой) используется в полях <
день-месяца>
и <день-недели>
для обозначения произвольного значения и, таким образом, игнорирует значение поля. Например, если мы хотим запускать сценарий «5 числа каждого месяца» независимо от того, какой день недели приходится на эту дату, мы указываем «?» в поле <день недели>
. - – (диапазон) определяет диапазон значений. Например, «10-11» в поле
<hour>
означает «10-е и 11-е часы». - , (values) указывает несколько значений. Например, «ПН, СР, ПТ
»
в поле <день недели>
означает дни «понедельник, среда и пятница». - / (инкременты) указывает возрастающие значения. Например, «5/15» в поле <
minute>
означает «5, 20, 35 и 50 минут часа». - L (последний) имеет разные значения при использовании в разных областях. Например, если он применяется в поле <
день-месяца>
, это означает последний день месяца, т.е. «31 января» и так далее в соответствии с календарным месяцем. Его можно использовать со значением смещения, например «L-3», которое обозначает «с третьего по последний день календарного месяца». В <day-of-week>
он указывает «последний день недели». Его также можно использовать с другим значением в <day-of-week>
, например «6L», что означает «последняя пятница». - W (день недели) определяет день недели (с понедельника по пятницу), ближайший к данному дню месяца. Например, если мы указываем «10 Вт» в поле <
день-месяца>
, это означает «день недели, близкий к 10-му числу этого месяца». Таким образом, если «10-е» — это суббота, задание будет запущено «9-го числа», а если «10-е» — воскресенье, оно будет запущено «11-го числа». Если мы укажем «1W» в <день-месяца>
и если «1-е» — это суббота, задание будет запущено «3-е», то есть в понедельник, и оно не вернется к предыдущему месяцу. - # указывает «N-е» появление дня недели месяца, например, «третья пятница месяца» может быть обозначена как «6#3».
3.2. Примеры выражений Cron
Давайте рассмотрим несколько примеров выражений cron
с использованием комбинаций полей и специальных символов:
Ежедневно в 12:00 (полдень) :
0 12 * * ?
Каждые пять минут, начиная с 13:00 и заканчивая 13:55, а затем начиная с 18:00 и заканчивая 18:55, каждый день :
0/5 13,18 * * ?
Каждую минуту, начиная с 13:00 и заканчивая 13:05, каждый день :
0-5 13 * * ?
В 13:15 и 13:45 каждый вторник в июне :
15,45 13 ? 6 Tue
В 9:30 каждый понедельник, вторник, среду, четверг и пятницу :
30 9 ? * MON-FRI
В 9:30 15-го числа каждого месяца :
30 9 15 * ?
В 18:00 последнего дня каждого месяца :
0 18 L * ?
В 18:00 третьего-последнего числа каждого месяца :
0 18 L-3 * ?
В 10:30 в последний четверг каждого месяца :
30 10 ? * 5L
В 10:00 третьего понедельника каждого месяца :
0 10 ? * 2#3
В 12 часов ночи ежедневно в течение пяти дней, начиная с 10-го числа месяца :
0 0 10/5 * ?
4. Специальные строки Cron
В дополнение к полям, указанным в выражении cron, также поддерживаются некоторые специальные, предопределенные значения, которые мы можем использовать вместо полей:
@reboot
— запускать один раз при старте@yearly
или@annuly
— запускать раз в год@monthly
— запускать раз в месяц@weekly
— запускать раз в неделю@daily
или@midnight
— запускать один раз в день@hourly
– работать ежечасно
5. Вывод
В этой быстрой статье мы рассмотрели задания cron и
crontab
.
Мы также видели ряд примеров выражений, которые мы можем использовать в нашей повседневной работе или просто делать выводы из других выражений.