Религия CRON

  • Михаил
  • 17 мин. на прочтение
  • 166
  • 14 Sep 2023
  • 16 Oct 2024

Очередная заметка, почему именно религия, рассматривать будем не сам CRON (как программу), а формат записи. Формат Cron это простой, но мощный и гибкий способ описания времени и периодичности действий. Традиционный (унаследованный из мира Unix) cron-формат состоит из пяти полей, разделенных пробелами.

<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>

Имеется и улучшенные варианты cron записей, который отличается от традиционного шестым добавленным полем - <Секунды>.

<Секунды> <Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели> 

 Планировщик  quartz использует запись форма CRON на семь параметров.

 <Секунды> <Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели> <Год>

Параметры Crontabcrontab-params

crontab -e    Редактирование или создание файла расписания для текущего пользователя
crontab -l     Вывод содержимого расписания текущего пользователя
crontab -r     Удаление файла расписания текущего пользователя
crontab -i     Удаление файла расписания текущего пользователя с запросом перед удалением
crontab -u    user Работа с расписаниями конкретных пользователей. Доступно только суперпользователю

Синтаксис Crontab и операторы
Каждая запись в crontab состоит из шести полей, указываемых в следующем порядке:

minute(s) hour(s) day(s) month(s) weekday(s) command(s)

# Пользователя может не указываться
[минута] [час] [день месяца] [месяц] [день недели] [пользователь] [команда]


*  *   *   *   * выполняемая команда
-  -   -   -   -
|   |   |    |   |
|   |   |    |   ----- День недели (0 - 7) (Воскресенье =0 или =7)
|   |   |    -------  Месяц (1 - 12)
|   |   ---------    День (1 - 31)
|    -----------   Час (0 - 23)
-------------     Минута (0 - 59)

Рассмотрим основные правила составления записи в формате CRON (традиционный вариант на 5 параметров). 

Поля разделяются пробелами или знаками табуляции. Первые пять представляют собой числовые значения, а шестое - это команда, которая будет выполняться. В следующей таблице кратко описывается каждое из полей:

ПолеДиапазон значенийОписание
minute0-59Минута запуска команды
hour0-23Час запуска
day1-31Число (день) запуска
month1-12Месяц запуска
weekday0 - 6День недели запуска (воскресенье = 0, понедельник = 1, вторник = 2 и т.д.)

Значение первых пяти полей может быть либо * (звездочкой), что означает все допустимые значения, либо списком элементов, разделенных запятыми. Элемент является либо числовым, либо диапазоном чисел, обозначенным двумя значениями, разделенными тире (например, 10-12). 

Специальные символы в выражении

Символ

Логика

Значение

Пример

*

all

Все. Означает, что расписание должно выполняться для каждой единицы времени“*” в поле минута указывает, что расписание выполняется каждую минуту
?

any

Любой. Представляет любое произвольное значение. Это может использоваться только в полях день месяца и день недели“?” в поле день месяца не будет использовать день месяца для определения расписания, поскольку здесь приемлемо любое значение

range

Диапазон. Представляет собой непрерывный диапазон значений.Использование “5-8” в поле <час> указывает на часы 5, 6, 7 и 8
,

values

Несколько значений. Разделяет список разных значенийИспользование “5, 6, 10” в поле <час> указывает на часы 5, 6 и 10
/

increments

Увеличивать. Указывает величину, на которую следует увеличивать значения поля3/5 в поле минута указывает на минуты 3, 8, 13, ..., 58 в час. */10 в поле минута указывает на минуты 0, 10, 20..., 60
L

last

Определение последнего дняВ поле "Day of month", к примеру, значение "L" подразумевает, что задача будет выполняться в последний день каждого месяца. В поле "Month" значение "6L" обозначает, что задача была запущена в прошлую пятницу месяца
W

weekday

Определение буднего дня (понедельник-пятница)Например, в поле "Day of month" значение "15 W" будет обозначать самый близкий будний день к 15-ому из месяца, то есть если 15-м числом является суббота, задача будет запущена в пятницу 14-го. Если 15-ым числом будет воскресенье, то задача будет запущена в понедельник 16-го
#

N-го

Используется для указания «N-го» появления дня недели месяца3-я пятница месяца» может быть обозначена как «6#3»

Формат описания диапазонов числовых значений

Диапазоны числовых значений могут задаваться в следующем формате:

ОбъявлениеЗначение
*Любое числовое значение
*/5Любое числовое значение, кратное 5
1-6Любое числовое значение из диапазона от 1 до 6 (включительно)
0-30/5Любое числовое значение из диапазона от 0 до 30, кратное 5
1,4,9Значение 1, 4 или 9

Формат описания месяцев

Месяцы могут описываться как с помощью числовых, так и с помощью строковых значений:

Числовое значениеСтроковое значениеМесяц
1janЯнварь
2febФевраль
3marМарт
4aprАпрель
5mayМай
6junИюнь
7julИюль
8augАвгуст
9sepСентябрь
10octОктябрь
11novНоябрь
12decДекабрь

Формат описания дней недели

Дни недели также могут описываться также как с помощью числовых, так и с помощью строковых значений:

Числовое значениеСтроковое значениеЗаписьДень недели
0SundaySUNВоскресенье
1MondayMONПонедельник
2TuesdayTRUВторник
3WednesdayWEDСреда
4ThursdayTHUЧетверг
5FridayFRIПятница
6SaturdaySATСуббота

Классический формат на 5 параметров

НомерДескрипторПриемлемые значения
1минутаот 0 до 59 или *
2часот 0 до 23 или * (UTC)
3день месяцаот 1 до 31 или *
4месяц от 1 до 12 или *
5день неделиот 0 до 7 (где 0 и 7 обозначают воскресенье) или *

Формат на 6 параметров

НомерДескрипторПриемлемые значения
1секундаот 0 до 59 или *
2минутаот 0 до 59 или *
3часот 0 до 23 или * (UTC)
4день месяцаот 1 до 31 или *
5месяц от 1 до 12 или *
6день неделиот 0 до 7 (где 0 и 7 обозначают воскресенье) или *

 Формат на 7 параметров 

НомерДескрипторПриемлемые значения
1секундаот 0 до 59 или *
2минутаот 0 до 59 или *
3часот 0 до 23 или * (UTC)
4день месяцаот 1 до 31 или *
5месяц от 1 до 12 или *
6день неделиот 0 до 7 (где 0 и 7 обозначают воскресенье) или *
7годот 0000 до 3000

 

Примеры заданий Cron

* * * * *каждую минуту
* 0 * * *каждую минуту, между 00:00 и 00:59
5,15,30 * * * *в 5,15,30 минут каждого часа каждый день
*/5 * * * *каждые 5 минут
*/30 * * * *каждые 30 минут (пол часа)
0 * * * * или @hourlyкаждый час
15 * * * *каждый час в 15 минут
0 * * * 1-5каждый час по рабочим дням (пн - пт)
* */2 * * *каждый четный час
*/30 * * * 1-5каждые пол часа по рабочим дням (пн - пт)
30 6 * * *каждый день в 06:30
30 6,8,10,12 * * *каждый день в 06:30,08:30,10:30,12:30
0 10,12 * * 1,3в понедельник и среду в 10:00 и 12:00
0 10,12 * * 1-3с понедельника по среду в 10:00 и 12:00
0 0 * * 1-5в полночь с понедельника по пятницу
0 1 * * 7в час ночи (01:00) с субботы на воскресенье
0 0 * * 1каждый понедельник:
0 1 * * satкаждую субботу в 1 час ночи
0 9,18 * * 1каждый понедельник в 9:00 и 18:00
0 12 1 * *каждый месяц 1 числа в 12:00
15 9 1,15 * *в 21:15, 1 и 15 числа каждого месяца
0 8 * * 3,6в 8:00 по средам и субботам
0 7 1 * *1 числа каждого месяца в 7-00
0 12 * * 1в 12-00 по понедельникам
0 10,11 * * *в 10:00 и 11:00 ежедневно
0 6-18/30 * * *каждые пол часа с 6:00 до 18:00
15 9-19/2 * * *каждые 2 часа с 9:15 до 19-15
20 8-18/1 * * *каждый час с 8-20 до 18-20
10,40 10-16 * * *в 10 и 40 минут с 10:00 до 16:00
15 7-23 * * *с 7:15 до 23:15 в 15 минут каждого часа
20 4-18/2 * * *с 4-20 до 18-20 в 20 минут каждые 2 часа
*/10 5-22 * * *с 5:00 до 22:00 каждые 10 минут
59 23 31 dec *новый год
? ? ? ? *запустится только при старте
? * * * *запустится при старте (например, в 10:15) и продолжит запускаться ровно через один час: в 11:15, 12:15, 13:15 и т.д.
* ? * * *будет запускаться ежеминутно, в час старта
*/5 ? * * *на следующий день (если крон не перезапускался) в этот же час каждую минуту и т. д. будет запускаться ежедневно, раз в пять минут, в час старта.
0 0 12 * * ?в 12:00 (полдень) каждый день
0 15 10 ? * *в 10:15 каждый день
0 15 10 * * ?в 10:15 каждый день
0 15 10 * * ? *в 10:15 каждый день
0 15 10 * * ? 2005в 10:15 каждый день в течение 2005 года
0 * 14 * * ?каждую минуту, начиная с 14:00 и заканчивая 14:59, каждый день
0 */1 * * * ?каждую минуту, начиная с 0 секунды, каждый день
0 0/5 14 * * ?каждые 5 минут, начиная с 14:00 и заканчивая 14:55, каждый день
0 0/5 14,18 * * ?каждые 5 минут, начиная с 14:00 и заканчивая 14:55, И ведите огонь каждые 5 минут
0 0-5 14 * * ?каждую минуту, начиная с 14:00 и заканчивая 14:05, каждый день
0 10,44 14 ? 3 WEDв 14:10 и в 14:44 каждую среду в марте
0 15 10 ? * MON-FRIв 10:15 каждый понедельник, вторник, среду, четверг и пятницу
0 15 10 15 * ?в 10:15 15-го числа каждого месяца
0 15 10 L * ?в 10:15 в последний день каждого месяца
0 15 10 L-2 * ?в 10:15 предпоследнего последнего дня каждого месяца
0 15 10 ? * 6Lв 10:15 в последнюю пятницу каждого месяца
0 15 10 ? * 6L 2002-2005в 10:15 каждую последнюю пятницу каждого месяца в 2002, 2003, 2004 и 2005 годах
0 15 10 ? * 6#3в 10:15 в третью пятницу каждого месяца
0 0 12 1/5 * ?в 12:00 (полдень) каждые 5 дней каждого месяца, начиная с первого числа месяца
0 11 11 11 11 ?каждый 11 ноября в 11:11
5,15,25,45 9-18 * * 1-5каждый день с понедельника по пятницу, с 9 до 18 часов, в 5, 15, 25 и 45 минут
0 0 12 * * ? 2017в 12:00 (полдень) каждый день в течение 2017 года
0 0/5 13,18 * * ?каждые 5 минут, начиная с 13:00 и заканчивая 13:55 и затем с 18:00 до 18:55, каждый день
0 0-5 13 * * ?каждую минуту с 13:00 до 13:05, каждый день
0 15,45 13 ? 6 Tueв 13:15 и 13:45 каждый вторник в июне
0 30 9 ? * MON-FRIв 9:30 каждый понедельник, вторник, среду, четверг и пятницу
0 30 9 15 * ?в 9:30 15 числа каждого месяца
0 0 18 L * ?в 18:00 в последний день каждого месяца
0 0 18 L-3 * ?в 18:00 с 3-го по последний день каждого месяца
0 30 10 ? * 5Lв 10:30 в последний четверг каждого месяца
0 0 18 ? * 6L 2015-2017в 18:00 в последнюю пятницу каждого месяца в 2015, 2016 и 2017 годах
0 0 10 ? * 2#3в 10 часов утра третьего понедельника каждого месяца
0 0 0 10/5 * ?в 12 часов ночи в полночь каждого дня в течение пяти дней, начиная с 10-го числа месяца