Кварц. Net - Cron Schedule Builder не работает после 31.12.2020 - PullRequest
2 голосов
/ 09 января 2020

Я пытаюсь получить работу cron, работающую в Кварце. net, которая внезапно начала действовать, а не работать вообще. До 31 декабря 2019 года он работал нормально, но к 2020 году просто перестал работать.

public static async Task StartScheduledTasksAsync()
    {

            // Grab the Scheduler instance from the Factory 
            IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();

            // and start it off
            await scheduler.Start();

            // define the job and tie it to our LogPendingRequests class
            IJobDetail job = JobBuilder.Create<SendReports>()
                .WithIdentity("job", "group")
                .Build();

            // Trigger the job to run now, and then daily at 8 AM EST.
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger", "group")
                .StartNow()
                .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(8, 0).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")))
                .Build();

        // define the job and tie it to our SetAllEquipmentMaintenanceStatus class
        IJobDetail job1 = JobBuilder.Create<SetAllEquipmentMaintenanceStatus>()
            .WithIdentity("job1", "group1")
            .Build();

        // Trigger the job to run now, and then repeat every 24 hours
        ITrigger trigger1 = TriggerBuilder.Create()
            .WithIdentity("trigger1", "group1")
            .StartNow()
            .WithSimpleSchedule(x => x
            .WithIntervalInHours(24)
            .RepeatForever())
            .Build();

        await scheduler.ScheduleJob(job, trigger);
        await scheduler.ScheduleJob(job1, trigger1);
    }

К сожалению, похоже, что задание SetAllEquipmentMaintenanceStatus выполняется нормально по расписанию каждые 24 часа, а задание cron SendReports делает не хочу бежать. Понятия не имею почему. Когда я переключаю задание SendReports на другой триггер, а SetAllEquipmentMaintenanceStatus на триггер задания cron, задание SendReports работает как положено, но SetAllEquipmentMaintenanceStatus не запускается, поэтому я знаю, что это триггер, но я не знаю, как его исправить.

Я не внес никаких изменений в кодировку, за исключением незначительного исправления 4 декабря 2019 года. Кроме того, новый код не был объединен, поэтому я вполне уверен, что это были некоторые изменения вне моего контроля. Были ли какие-либо обновления в Quartz, которые могут вызвать эту проблему?

Я собираюсь попробовать обновить пакет NuGet и проверить этот вопрос. Любая обратная связь с благодарностью!

1 Ответ

0 голосов
/ 13 января 2020

Простой способ проверить, на какие даты запускается ваш триггер, - это использовать TriggerUtils . Со следующим кодом:

var trigger = TriggerBuilder.Create()
    .WithIdentity("trigger", "group")
    .StartNow()
    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(8, 0).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")))
    .Build();

var fireTimes = TriggerUtils.ComputeFireTimesBetween(
    (IOperableTrigger) trigger,
    cal: null,
    from: new DateTimeOffset(2019, 12, 31, 0, 0, 0, TimeSpan.Zero),
    to: new DateTimeOffset(2020, 2, 1, 0, 0, 0, TimeSpan.Zero));

Я получаю (UT C раз):

31.12.2019 13.00.00 +00:00
1.1.2020 13.00.00 +00:00
2.1.2020 13.00.00 +00:00
3.1.2020 13.00.00 +00:00
4.1.2020 13.00.00 +00:00
5.1.2020 13.00.00 +00:00
6.1.2020 13.00.00 +00:00
7.1.2020 13.00.00 +00:00
8.1.2020 13.00.00 +00:00
9.1.2020 13.00.00 +00:00
10.1.2020 13.00.00 +00:00
11.1.2020 13.00.00 +00:00
12.1.2020 13.00.00 +00:00
13.1.2020 13.00.00 +00:00
14.1.2020 13.00.00 +00:00
15.1.2020 13.00.00 +00:00
16.1.2020 13.00.00 +00:00
17.1.2020 13.00.00 +00:00
18.1.2020 13.00.00 +00:00
19.1.2020 13.00.00 +00:00
20.1.2020 13.00.00 +00:00
21.1.2020 13.00.00 +00:00
.... the list goes on ...

Таким образом, с точки зрения Кварца, триггер действителен и должен срабатывать. Подводный камень, который может вызвать проблемы, состоит в том, что в работе есть конструктор, который может генерировать исключения, и он будет отображаться как неработающий. Вы пытались включить дополнительные журналы, чтобы убедиться, что это Quartz не обрабатывает задание?

...