9

I have to execute job every day at midnight Pacific Time. I am using MVC3 with Quartz.NET library.

Here is my code:

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();
}

This code makes this job run only once at first midnight(in Pacific Time). I have set there .WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever()) but it is not working - job is not repeating every day.

What can I do to make it work every day?

4

2 回答 2

4

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

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

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

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

于 2012-04-30T08:25:31.370 回答
4

这个问题已在 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。以间隔数次和以数次重复计数

于 2019-06-05T08:43:47.540 回答