【问题标题】:How to start a job every day at the same hour in Quartz.net?如何在 Quartz.net 每天同一时间开始工作?
【发布时间】:2012-05-09 23:05:03
【问题描述】:

我必须每天在太平洋时间午夜执行工作。我正在使用 MVC3 和 Quartz.NET 库。

这是我的代码:

public static void ConfigureQuartzJobs()
{
    ISchedulerFactory schedFact = new StdSchedulerFactory();

    IScheduler sched = schedFact.GetScheduler();

    DateTime dateInDestinationTimeZone = System.TimeZoneInfo
        .ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, System.TimeZoneInfo.Utc.Id, "Pacific Standard Time").Date;


    IJobDetail job = JobBuilder.Create<TimeJob>()
        .WithIdentity("job1", "group1")
        .Build();

    ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("trigger1", "group1")
        .StartAt(dateInDestinationTimeZone)
        .WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
        .Build();

    sched.ScheduleJob(job, trigger);

    sched.Start();
}

此代码使该作业仅在第一个午夜(太平洋时间)运行一次。我在那里设置了.WithSimpleSchedule(x =&gt; x.WithIntervalInHours(24).RepeatForever()),但它不起作用 - 工作不是每天都在重复。

我该怎么做才能让它每天都正常工作?

【问题讨论】:

    标签: c# asp.net-mvc-3 scheduling quartz.net


    【解决方案1】:

    您的计划任务是否由 Web 应用程序托管?如果是这样,您可能会遇到此类问题。 Web 应用程序不适合运行计划任务。您应该创建托管计划任务的 Windows 服务。

    但也有一些事情你可以检查:

    1. 尝试使用较短的时间段(即,如果您将间隔设置为 1 分钟,请检查这是否有效)。
    2. 试试CronTrigger - 我在 Windows 服务中使用它,它工作正常。

    有一些文章解释了在 Web 应用程序中托管计划任务的优缺点,即。这个:http://www.foliotek.com/devblog/running-a-scheduled-task/.

    【讨论】:

    • 我使用了 CronTrigger - 它无法正常工作。它不会在应该的时间运行,但足够接近。
    • 在我的例子中,将时间间隔从 30 分钟减少到 5 分钟可以使工作正常工作。
    【解决方案2】:

    这个问题是 7 年前提出的,并且已经接受了答复。但我认为 7 年来发生了一些变化,所以我会通过 CronScheduleBuilder 建议这个解决方案。

            //Constructing job trigger.
            ITrigger trigger = TriggerBuilder.Create()
                              .WithIdentity("Test")
                              .WithSchedule(CronScheduleBuilder
                              .DailyAtHourAndMinute(16,40))
                          .WithSimpleSchedule(x=>x.WithIntervalInMinutes(number)
                              .WithRepeatCount(number) 
                              .Build();
    

    此代码每天在特定时间触发作业,在本例中为 16:40。间隔 number 次,重复计数 number

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多