#quartz-scheduler #quartz.net
#quartz-планировщик #quartz.net
Вопрос:
У меня есть служба .net Windows, которая создает и планирует задания quartz, которые планируется запускать каждые 4 часа ВС-СБ, начиная с 4 часов утра в день запуска службы Windows. К сожалению, в тот момент, когда я запускаю свои задания службы Windows, они запускаются намного раньше графика и повторяют задания более пары раз, а позже работают только по расписанию. Как я могу предотвратить запуск заданий сразу после запуска моей службы Windows и запускать их только в запланированное время. Я использую планировщик crons. Я использую Oracle DB для поддержания своих графиков работы.
ITrigger objESLJobTrigger = TriggerBuilder.Create()
.WithIdentity("Trigger-" Key.ToString(), xxx.ToString())
.StartAt(DateTimeOffset.Parse(DateTime.Today.AddHours(4).ToString()).LocalDateTime)
.WithCronSchedule("0 0 0/4 ? * SUN-SAT", x => x.WithMisfireHandlingInstructionIgnoreMisfires())
.Build();
Ответ №1:
Обновлено после комментария: да, вам нужно использовать StartAt
метод, но:
-
вам необходимо использовать сегодняшнюю дату,
StartAt
если служба запускается до 4 часов утра, в противном случае используйте завтрашнюю дату:var startAtDateTime = DateTime.Today.AddHours(4); if (startAtDateTime < DateTime.UtcNow) { startAtDateTime = startAtDateTime.AddDays(1); } and then use .StartAt(new DateTimeOffset(startAtDateTime))
-
обратите внимание, что
StartAt
ожидается время в формате UTC, а не в локальном, поэтому, если вам нужно запустить задание в 4 часа утра по местному часовому поясу, не забывайте о смещении часового пояса.
Кроме того, поскольку «ВС-СБ» означает каждый день, вы можете упростить выражение cron до 0 0 0/4 ? * *
Комментарии:
1. Спасибо за ответ. Но если я удалю when to startAt, как я могу определить, в какое время он должен запускать задание первым. Предположим, если я запущу свою службу Windows, в которой фактически размещен мой quartz, сегодня около 5 вечера вечером, и я хочу, чтобы моя работа начиналась только с завтрашнего утра в 4 часа утра, а затем каждые 4 часа после этого, как я могу это сделать.