Quartz.NET и проблема перехода на летнее время

У нас есть настройка триггера Quartz.NET cron, которая должна выполнять задание по следующему расписанию:

Ежедневно в 02:00 по торговому часовому поясу

Однако при переходе на летнее время (DST) возникают отклонения, например:

  • Когда часовой пояс продавца меняется с +2 по Гринвичу на +3 по Гринвичу, задание не выполняется.
  • Когда часовой пояс продавца перемещается с +3 по Гринвичу на +2 по Гринвичу, задание выполняется дважды.

Мы уже знаем, что такое поведение является преднамеренным (http://www.quartz-scheduler.net/faq.html#daylight), но что люди используют в качестве решения этой проблемы перехода на летнее время?

Ваше здоровье

Билли Стэк


person bstack    schedule 10.01.2012    source источник


Ответы (3)


Ссылка, на которую вы указываете, могла быть обновлена ​​примерно через три года (!) С тех пор, как вы задали этот вопрос. Казалось бы, задание не должно выполняться дважды.

Я не уверен, что 02:00 официально «происходит» в США, когда начинается переход на летнее время, поэтому беспокойство по поводу пропуска выполнения задания в 02:00 можно решить, установив его на 01:59:59 (триггер cron «59 59 1 ? *"), пока вы были в Северной Америке. Другие страны могут измениться в другое время ночи. В Европе, например, изменение происходит в 01:00, поэтому там триггер лучше ставить на 02:00:01.

person Josh Gallagher    schedule 29.09.2012

Только что столкнулся с той же проблемой, хотя в моем случае триггер не должен был срабатывать между 0:00 и временем перехода на летнее время (2:00 в США). Вместо этого у меня была работа, которая выполнялась с ПН по ПТ в 8 утра, поэтому она выполнялась дважды в понедельник, 5 ноября, на следующий день после дня перехода на летнее время.

Если вы читаете пункт часто задаваемых вопросов, на который есть ссылка в вопросе, это имеет смысл. Триггер Cron просыпается, запускает задание, а затем вычисляет время следующего пробуждения. Когда он проснулся в пятницу в 8 утра, он рассчитал, что в следующий раз он будет работать в понедельник в 8 утра. Однако к утру понедельника то, что раньше было 8 утра, стало 7 утра, поэтому спусковой крючок сработал именно в это время. А затем, когда он запустился, следующее время было «правильно» рассчитано как 8 утра, поэтому он снова запустился в это же время.

Надеюсь, это поможет кому-то, кто пытается понять проблему.

person zvolkov    schedule 05.11.2012

Задания запускаются дважды осенью и не запускаются вообще весной. Неважно, на какое время они назначены. Вопрос был и остается: как предотвратить это? Если вы вручную удалите все задания после изменения времени и до их запуска, а затем добавите их обратно, тогда все будет работать нормально. Я еще не смотрел на это, но думаю, что это может быть автоматизировано. Напишите что-нибудь, что читает все запланированные задания, добавляет их и удаляет старые записи. Все, что вы пишете, должно запускаться из планировщика заданий Windows, потому что весной оно вообще не запустится, если будет работать из Quartz.

person Brad Snapp    schedule 12.11.2020
comment
Это проницательно. Но на самом деле это не похоже на ответ на вопрос в верхней части страницы. Не могли бы вы отредактировать и сделать ответную часть более очевидной? Я имею в виду, что этот пост должен быть ответом в конце концов .... - person Yunnosch; 12.11.2020
comment
А когда у вас будет время, пройдите тур и прочитайте Как ответить. - person Yunnosch; 12.11.2020
comment
Если вы вручную удалите все задания после изменения времени и до их запуска, а затем добавите их обратно, тогда все будет работать нормально. Сомневаюсь, что это помогает, когда работы вообще НЕ запланированы на весну. - person Yunnosch; 12.11.2020