Skip to content

Примеры выражений Cron

1. Обзор

1.1 Сценарии применения

Если установка частоты обновления сложна и не может быть задана напрямую с помощью "Простого выполнения повтора" или "Детальной установки частоты", мы можем использовать выражение Cron для достижения этой цели.

В этой статье на примере показано, как настроить выражение Cron.

1.2 Функциональное описание

Выражение Cron - это строка символов, разделенных 5 или 6 пробелами и разбитых на 6 или 7 полей, каждое из которых представляет собой временной диапазон. Cron имеет следующие два формата синтаксиса:

  • Секунды Минуты Часы День месяца Месяц День недели Год.
  • Секунды Минуты Часы День месяца Месяц День недели.

Слева направо (разделенные пробелами): секунды минуты часы дата в месяце месяц дата в неделе год (необязательно).

Примечание: Пользователи могут обратиться к генератору выражений Cron, чтобы проверить правильность написания выражения, и заполнить его после того, как убедятся в его правильности.

2. Правила выражения Cron

В каждом поле могут присутствовать следующие символы:

домен (таксономия)допустимое значениеРазрешенные специальные символы
СекундыЦелые числа от 0 до 59, - * / четыре символа
ПротоколыЦелые числа 0-59, - * / четыре символа
ЧасыЦелые числа 0-23, - * / четыре символа
День месяцаЦелые числа от 0 до 31 (но необходимо учитывать количество дней в месяце),- * ? / L W C восемь символов
МесяцЦелые числа от 1 до 12 или английский язык JAN-DEC, - * / четыре символа
День неделиЦелые числа 1-7 или английский SUN-SAT (1=SUN, 2=MON, ...), - * ? / L C # Восемь символов
Год1970-2099, - * / четыре символа

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

персонажскрытый смысл
*обозначает любое значение, соответствующее полю; если в поле Minutes используется *, это означает, что событие будет запускаться каждую минуту.
?Может использоваться только для полей DayofMonth и DayofWeek. Он также соответствует любому значению в поле, но не совпадает. Потому что DayofMonth и DayofWeek влияют друг на друга. Например, если вы хотите запустить отправку 20-го числа месяца, независимо от того, какой день недели приходится на 20-е число, вы можете использовать только следующее: 13 13 15 20 * ? где последняя цифра может быть использована только как ? а не *, что означает, что расписание будет срабатывать независимо от дня недели, а это не так!
-Указывает диапазон, например, использование 5-20 в поле Minutes означает, что триггер будет срабатывать каждую минуту с 5 до 20 минут.
/Указывает, что триггер срабатывает в начальное время, а затем через фиксированные промежутки времени, например, использование 5/20 в поле Minutes означает, что триггер срабатывает раз в 5 минут и раз в 25, 45 и т.д.
,означает список перечисляемых значений. Например, использование 5,20 в поле Minutes означает, что триггер будет срабатывать раз в минуту в 5 и 20 минут.
LЭтот символ используется только в полях DayofMonth и DayofWeek и означает "Last", но имеет разные значения в этих двух полях; L в поле Day означает последний день месяца, например 31 января или 28 февраля в невисокосные годы, а если он используется в поле Day of Week, то означает субботу, что эквивалентно 7. Если L используется в неделе, это означает субботу, что эквивалентно 7. Однако если L предшествует значение X, оно имеет другие значения. Например, 6L в месяце означает предпоследний день месяца; FRIL в поле недели означает последнюю пятницу месяца.
WЭтот символ, который может появляться только в поле DayofMonth, является модификатором ведущей даты, указывая на ближайший рабочий день (с понедельника по пятницу) к этой дате. Например, 15W означает ближайший рабочий день к 15-му числу месяца (с понедельника по пятницу). Если 15-е число месяца приходится на субботу, то совпадет с пятницей 14-го; если 15-е - воскресенье, то совпадет с понедельником 16-го; если 15-е - вторник, то результатом будет вторник 15-го. Однако следует отметить, что связанная дата совпадения не может быть в течение всего месяца, например, если вы укажете 1W, то если 1-е число - суббота, результат будет соответствовать 3-му понедельнику, а не последнему дню месяца. w Строка может быть указана только как одна дата, и не может указывать диапазон дат!
LWПоле DayofMonth можно объединить, чтобы использовать LW, что означает последний рабочий день месяца (с понедельника по пятницу).
CЭтот символ используется только в полях DayofMonth и DayofWeek и означает "Календарь". Он означает дату, с которой связан план, или все даты в календаре, если дата не связана. Например: 5C в поле Date - это первый день после 5-го дня календаря; 1C в поле Day of Week - это первый день после воскресенья.
#Этот символ можно использовать только в поле DayofWeek для обозначения дня недели (с понедельника по пятницу) в месяце. Например, 6#3 означает третью пятницу месяца (6 означает пятницу, #3 - текущую третью); а 4#5 означает пятую среду месяца, при условии, что пятой среды в месяце нет.

3. Примеры

Например, мы хотели бы использовать папку "Данные департамента", которая обновляется с понедельника по пятницу в 8 утра.

1) Установите для папки "Departmental Data" режим регулярного обновления, как показано на следующем рисунке:

1.png

2) На экране редактирования обновления таймера установите частоту выполнения на "Expression Setting" и введите соответствующее выражение Cron.

Это выражение указывает на то, что обновление выполняется каждый понедельник-пятницу в 8:00 утра.

2.png

3) После нажатия кнопки OK настройка будет выполнена успешно.

Здесь мы можем расширить эту тему:

отображаемая формуласкрытый смысл
0 0 8 ? * 2-6Один раз в неделю, с понедельника по пятницу, в 8 часов утра.
0 0/5 8-9 ? * 2-6Каждые 5 минут с 8 до 9 утра, с понедельника по пятницу.
0 0 8,17 ? * 2-6Один раз в неделю с понедельника по пятницу в 08:00 и 1700 часов.

3.1 Другие примеры ссылок

Общие сценарии
0 0 8,13 * * ?Срабатывает один раз в день в 8 утра и 1 час дня.
0 0 8-18 ? * MON-FRIСрабатывает каждый полный час с 8 до 18 часов (т.е. в обычное рабочее время), с понедельника по пятницу каждую неделю
0 0 12 ? * 2#1Срабатывает один раз в месяц в первый понедельник месяца в 12 часов дня
0 * 14 * * ?Срабатывает каждую минуту с 14:00 до 14:59 ежедневно.
0 0/5 14 * * ?Срабатывает каждые 5 минут с 14:00 до 14:55 каждый день.
0 55/10 14,18 * * ?Срабатывает ежедневно в 14.55 и 18.55.
0 10,44 14 ? 3 ВЕДСрабатывает по средам в марте в 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 ? * 6LСрабатывает в 10:15 в последнюю пятницу каждого месяца
0 15 10 ? * 6L 2002-2005Срабатывает в 10.15 утра в последнюю пятницу каждого месяца с 2002 по 2005 год.
0 15 10 ? * 6#3Срабатывает в 10:15 в третью пятницу каждого месяца
0 0 0 0 l-2 * ? *Предпоследний день месяца (FineReport 10.0 поддерживается, FineReport 9.0 не поддерживается)
простой сценарий
*/5 * * * * * ?Выполняется каждые 5 секунд
0 */1 * * * * ?Выполняется каждые 1 минуту
0 0 */1 * * ?Выполняется каждые 1 час
0 0 12 * * ?Выполняется один раз в день в 12 часов дня
0 0 0 0,13,18,21 * * ?Срабатывает один раз в день в 0:00, 13:00, 18:00 и 21:00.
0 0 0-8 * * ?Срабатывает каждый день с 0 до 8 часов вечера, каждый полный час.
0, 15, 10? * *Срабатывает в 10:15 утра каждое утро
0 15 10 * * ?Срабатывает в 10:15 утра каждое утро
0 15 10 * * ? *Срабатывает в 10:15 утра каждое утро
0 15 10 * * ? 20242024 Срабатывает в 10:15 утра каждый день.