Реализовано с использованием библиотеки Quartz.NET (opens new window), предоставляющей возможность планирования. Основываясь на выражениях cron (opens new window), дает возможность устанавливать интервалы повторов в календарном виде.

Выражение cron (opens new window) состоит из следующих семи полей:

  1. Секунды
  2. Минуты
  3. Часы
  4. День месяца
  5. Месяц
  6. День недели
  7. Год (необязательное поле)
* * * * * * *
- - - - - - -
| | | | | | |
| | | | | | └── год (необязательное поле)
| | | | | └──── день недели (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 (opens new window) "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 минут