Расписания
Реализовано с использованием библиотеки Quartz.NET, предоставляющей возможность планирования. Основываясь на выражениях cron, дает возможность устанавливать интервалы повторов в календарном виде.
Выражение cron состоит из следующих семи полей:
- Секунды
- Минуты
- Часы
- День месяца
- Месяц
- День недели
- Год (необязательное поле)
* * * * * * *
- - - - - - -
| | | | | | |
| | | | | | └── год (необязательное поле)
| | | | | └──── день недели (0—7) (воскресенье = 0 или 7)
| | | | └────── месяц (1—12)
| | | └──────── день (1—31)
| | └────────── час (0—23)
| └──────────── минута (0—59)
└────────────── секунда (0—59)
Специальные символы
Триггеры cron используют серию специальных символов, например:
- Символ косая черта (/) обозначает приращение значения. Например, "5/15" в поле "секунды" означает каждые 15 секунд, начиная с пятой секунды.
- Знак вопроса (?) и букву L (L) разрешается использовать только в полях "день месяца" и "день недели". Знак вопроса означает, что в поле не должно быть указанной величины. Таким образом, если вы устанавливаете день недели, вы можете вставить "?" в поле "день недели" для обозначения того, что значение "день недели" несущественно. Буква L - это сокращение от last (последний). Если она помещается в поле "день месяца", задание будет запланировано на последний день месяца. В поле "день недели" "L" равнозначно "7", если помещается само по себе, или означает последний экземпляр "дня недели" в этом месяце. Так, "0L" запланирует выполнение задания на последнее воскресенье данного месяца.
- Буква W (W) в поле "день месяца" планирует выполнение задания на ближайший к заданному значению рабочий день. Введя "1W" в поле "день месяца" вы планируете выполнение задания на рабочий день, ближайший к первому числу месяца.
- Знак фунта (#) устанавливает конкретный рабочий день данного месяца. Ввод "MON#2" в поле "день недели" планирует задание на второй понедельник месяца.
- Знак астериска (*) является подстановочным знаком и обозначает, что любое возможное значение может быть принято для данного отдельного поля.
Все эти определения могут привести в уныние, но выражения cron становятся простыми после нескольких минут тренировки.
Например, выражение cron "0/5 * * * * ?" планирует выполнение каждые 5 секунд.
Другие примеры:
5 0 * * * // каждый день в 0 часов 5 минут
15 14 1 * * // 1 числа каждого месяца в 14 часов 15 минут
0 22 * * 1-5 // каждый рабочий день в 22:00
23 */2 * * * // в 0:23, 2:23, 4:23 и т. д.
5 4 * * sun // в 4:05 в воскресенье
0 0 1 1 * // 1 января ежегодно
15 10,13 * * 1,4 // в понедельник и четверг в 10:15 и 13:15
0-59 * * * * // ежеминутно
0-59/2 * * * * // по чётным минутам
1-59/2 * * * * // по нечётным минутам
*/5 * * * * // каждые 5 минут