2012-04-30 6 views
6

毎日太平洋時間の真夜中に仕事を実行しなければなりません。私はQuartz.NETライブラリで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 => x.WithIntervalInHours(24).RepeatForever())しかし、それは動作していない - ジョブは毎日繰り返されていません。

毎日動作させるにはどうすればよいですか?

ご迷惑をおかけして申し訳ありません。

答えて

4

スケジュールされたタスクは、Webアプリケーションによってホストされていますか?そのような場合は、このような問題が発生する可能性があります。 Webアプリケーションは、スケジュールされたタスクの実行には適していません。むしろ、スケジュールされたタスクをホストするWindowsサービスを作成する必要があります。

しかし、あなたは確認することができ、いくつかのものもあります。

  1. は(あなたは1分間のインターバルを設定している場合、これが動作するかどうか、すなわちチェック)より短い期間を使用してみてください。
  2. お試しくださいCronTrigger - 私はWindowsサービスでそれを使用しており、正常に動作します。

Webアプリケーションでスケジュールされたタスクをホストする賛否両論について説明する記事がいくつかあります。これはhttp://www.foliotek.com/devblog/running-a-scheduled-task/です。

+0

私はCronTriggerを使用しました。完全には動作しません。それは正確には実行されませんが、十分に近い状態で実行されます。 – Marta

+0

CronTrigger役に立つと思われる –

+0

私の場合、時間間隔を30分から5分に短縮すると、ジョブが正しく機能します。 – dsm

関連する問題