Руководство по выражениям Cron
1. обзор
Проще говоря, cron - это базовая утилита, доступная в системах на основе Unix. Это позволяет пользователям планировать выполнение задач периодически на указанную дату / время. И, естественно, это отличный инструмент для автоматизации многих процессов, которые в противном случае потребовали бы вмешательства человека.
Cron запускается как процесс-демон - это означает, что его нужно запускать только один раз, и он будет работать в фоновом режиме. В этом процессеcrontab используется для чтения записей расписаний и запуска задач.
Со временемthe cron expression format became widely adopted и может часто использоваться во многих других программах и библиотеках.
Дальнейшее чтение:
@ Запланированная аннотация весной
Как использовать аннотацию @Scheduled в Spring для запуска задач после фиксированной задержки, с фиксированной скоростью или в соответствии с выражением cron.
2. Работа сCrontab
Расписаниеcron - это простой текстовый файл, расположенный в папке/var/spool/cron/crontabs в системах Linux. We cannot edit the crontab files directly; нам нужно получить к нему доступ с помощью командыcrontab.
Например, чтобы открыть файлcrontab, вам нужно запустить эту команду:
crontab -e
Каждая строка вcrontab - это запись с выражением и командой для запуска:
* * * * * * /usr/local/ispconfig/server/server.sh
Эта запись добавляется для запуска упомянутого скрипта каждую секунду.
3. Выражение Cron
Давайте разберемся с выражениемcron; он состоит из шести полей:
Из них поле<year> является необязательным.
3.1. Специальные символы в выражении
-
* (all) - используется для указания, что событие должно происходить для каждой единицы времени. Например,“*” в поле <minute> - означает «за каждую минуту»
-
? (any) - используется в полях <day-of-month> и <day-of -week> для обозначения произвольного значения - значением поля пренебречь. Например, если мы хотим запускать скрипт «5-го числа каждого месяца» независимо от того, какой день недели приходится на эту дату, мы указываем «?» в поле <day-of-week>.
-
– (range) - используется для определения диапазона значений. Например, «10-11» в поле<hour> означает «10-е и 11-е часы».
-
, (values) - используется для указания нескольких значений. Например, «MON, WED, FRI” в поле <day-of-week> означает дни« понедельник, среда и пятница ».
-
/ (increments) - используется для указания инкрементальных значений. Например,“5/15” в поле <minute> означает «5, 20, 35 и 50 минут часа».
-
L (last) - имеет разное значение при использовании в разных областях. Например, если он указан в поле <day-of-month>, то это означает последний день месяца, т.е. «31 января» и т. Д. По календарному месяцу. Его можно использовать со значением смещения, например «L-3», которое обозначает «с третьего по последний день календарного месяца». В <day-of-week> он указывает «последний день недели». Его также можно использовать с другим значением в <day-of-week>, например «6L», что означает «прошлую пятницу».
-
W (weekday) - используется для указания дня недели (с понедельника по пятницу), ближайшего к данному дню месяца. Например, если мы укажем «10W» в поле <day-of-month>, то это будет означать «день недели около 10-го числа этого месяца». Таким образом, если «10-е» - суббота, то задание будет запущено «9-го», а если «10-е» - воскресенье, то оно сработает «11-го». Если вы укажете «1W» в <day-of-month> и если «1st» - суббота, то задание будет запущено в «3rd», то есть в понедельник, и не вернется к предыдущему месяцу.
-
# - используется для указания «N-го» появления дня недели месяца, например, «3-я пятница месяца» может быть обозначена как «6#3»
3.2. Примеры выражений Cron
Давайте посмотрим на несколько примеров выраженияcron с использованием комбинаций полей и специальных символов:
В 12:00 (полдень) каждый день в течение 2017 года:
0 0 12 * * ? 2017
Каждые 5 минут, начиная с 13:00 и заканчивая 13:55 и затем с 18:00 до 18:55, каждый день:
0 0/5 13,18 * * ?
Каждую минуту с 13:00 до 13:05, каждый день:
0 0-5 13 * * ?
В 13:15 и 13:45 каждый вторник в июне:
0 15,45 13 ? 6 Tue
В 9:30 каждый понедельник, вторник, среду, четверг и пятницу:
0 30 9 ? * MON-FRI
В 9:30 15 числа каждого месяца:
0 30 9 15 * ?
В 18:00 в последний день каждого месяца:
0 0 18 L * ?
В 18:00 с 3-го по последний день каждого месяца:
0 0 18 L-3 * ?
В 10:30 в последний четверг каждого месяца:
0 30 10 ? * 5L
В 18:00 в последнюю пятницу каждого месяца в 2015, 2016 и 2017 годах:
0 0 18 ? * 6L 2015-2017
В 10 часов утра третьего понедельника каждого месяца:
0 0 10 ? * 2#3
В 12 часов ночи в полночь каждого дня в течение пяти дней, начиная с 10-го числа месяца:
0 0 0 10/5 * ?
4. Специальные строки Cron
В дополнение к полям, указанным в выражении cron, также поддерживаются некоторые специальные предопределенные значения, которые можно использовать вместо полей:
-
@reboot - запускать один раз при запуске
-
@yearly или@annualy - запускать один раз в год
-
@monthly - запускать раз в месяц
-
@weekly - запускать раз в неделю
-
@daily или@midnight - запускать один раз в день
-
@hourly - запускать ежечасно
5. Заключение
В этой быстрой статье мы рассмотрели заданияcron иcrontab.
Мы также видели несколько примеров выражений, которые вы можете использовать в своей повседневной работе или просто делать выводы из других выражений.