Религия CRON
Очередная заметка, почему именно религия, рассматривать будем не сам 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 параметров).
Поля разделяются пробелами или знаками табуляции. Первые пять представляют собой числовые значения, а шестое - это команда, которая будет выполняться. В следующей таблице кратко описывается каждое из полей:
Поле | Диапазон значений | Описание |
---|---|---|
minute | 0-59 | Минута запуска команды |
hour | 0-23 | Час запуска |
day | 1-31 | Число (день) запуска |
month | 1-12 | Месяц запуска |
weekday | 0 - 6 | День недели запуска (воскресенье = 0, понедельник = 1, вторник = 2 и т.д.) |
Значение первых пяти полей может быть либо *
(звездочкой), что означает все допустимые значения, либо списком элементов, разделенных запятыми. Элемент является либо числовым, либо диапазоном чисел, обозначенным двумя значениями, разделенными тире (например, 10-12).
Специальные символы в выражении
Символ | Логика | Значение | Пример |
---|---|---|---|
* |
| Все. Означает, что расписание должно выполняться для каждой единицы времени | “*” в поле минута указывает, что расписание выполняется каждую минуту |
? |
| Любой. Представляет любое произвольное значение. Это может использоваться только в полях день месяца и день недели | “?” в поле день месяца не будет использовать день месяца для определения расписания, поскольку здесь приемлемо любое значение |
– |
| Диапазон. Представляет собой непрерывный диапазон значений. | Использование “5-8” в поле <час> указывает на часы 5, 6, 7 и 8 |
, |
| Несколько значений. Разделяет список разных значений | Использование “5, 6, 10” в поле <час> указывает на часы 5, 6 и 10 |
/ |
| Увеличивать. Указывает величину, на которую следует увеличивать значения поля | 3/5 в поле минута указывает на минуты 3, 8, 13, ..., 58 в час. */10 в поле минута указывает на минуты 0, 10, 20..., 60 |
L |
| Определение последнего дня | В поле "Day of month", к примеру, значение "L" подразумевает, что задача будет выполняться в последний день каждого месяца. В поле "Month" значение "6L" обозначает, что задача была запущена в прошлую пятницу месяца |
W |
| Определение буднего дня (понедельник-пятница) | Например, в поле "Day of month" значение "15 W" будет обозначать самый близкий будний день к 15-ому из месяца, то есть если 15-м числом является суббота, задача будет запущена в пятницу 14-го. Если 15-ым числом будет воскресенье, то задача будет запущена в понедельник 16-го |
# |
| Используется для указания «N-го» появления дня недели месяца | 3-я пятница месяца» может быть обозначена как «6#3» |
Формат описания диапазонов числовых значений
Диапазоны числовых значений могут задаваться в следующем формате:
Объявление | Значение |
---|---|
* | Любое числовое значение |
*/5 | Любое числовое значение, кратное 5 |
1-6 | Любое числовое значение из диапазона от 1 до 6 (включительно) |
0-30/5 | Любое числовое значение из диапазона от 0 до 30, кратное 5 |
1,4,9 | Значение 1, 4 или 9 |
Формат описания месяцев
Месяцы могут описываться как с помощью числовых, так и с помощью строковых значений:
Числовое значение | Строковое значение | Месяц |
---|---|---|
1 | jan | Январь |
2 | feb | Февраль |
3 | mar | Март |
4 | apr | Апрель |
5 | may | Май |
6 | jun | Июнь |
7 | jul | Июль |
8 | aug | Август |
9 | sep | Сентябрь |
10 | oct | Октябрь |
11 | nov | Ноябрь |
12 | dec | Декабрь |
Формат описания дней недели
Дни недели также могут описываться также как с помощью числовых, так и с помощью строковых значений:
Числовое значение | Строковое значение | Запись | День недели |
---|---|---|---|
0 | Sunday | SUN | Воскресенье |
1 | Monday | MON | Понедельник |
2 | Tuesday | TRU | Вторник |
3 | Wednesday | WED | Среда |
4 | Thursday | THU | Четверг |
5 | Friday | FRI | Пятница |
6 | Saturday | SAT | Суббота |
Классический формат на 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-го числа месяца |
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.