2013-01-07 72 views
0

我正在使用Quartz.NET庫,我需要每兩天執行一次作業,並在晚上22點到早上6點之間每隔兩個小時重複一次作業。我不知道如何做到這一點。我嘗試了所有將日曆與日曆結合起來以排除其他時間的觸發器,但沒有任何工作正如我所願。任何想法?在X和Y小時之間每隔N周執行一次作業

+0

你想使用cron或Quartz.NET嗎?對於後者,我忍不住,但對於cron:查看anacron:[Anacron](http://en.wikipedia.org/wiki/Anacron)或[Turorial](http://www.davidroessli.com/logs/2004/03/asynchronous_cron_jobs /) –

回答

2

這就是答案。

 protected void Application_Start() 
     { 
      //.... 
      EveryTwoWeek(); 
      //.... 
     } 

     private void MainJob() 
     { 
      int hourNumber = 2; 
      var schedFact = new Quartz.Impl.StdSchedulerFactory(); 

      var sched = schedFact.GetScheduler(); 

      sched.Start(); 

      var twoHourlyTriggerFrom22To6 = Quartz.TriggerUtils.MakeHourlyTrigger(hourNumber); 
      twoHourlyTriggerFrom22To6.StartTimeUtc = System.DateTime.Now.Date.AddHours(22); 
      twoHourlyTriggerFrom22To6.EndTimeUtc = System.DateTime.Now.Date.AddHours(22 + 8); 

      var jobDetail = new Quartz.JobDetail("Method", methodType); 
      sched.ScheduleJob(jobDetail, twoHourlyTriggerFrom22To6); 
     } 

     private void EveryTwoDays() 
     { 
      int dayNumber = 2; 
      var schedFact = new Quartz.Impl.StdSchedulerFactory(); 

      var sched = schedFact.GetScheduler(); 

      sched.Start(); 

      var everyTwoDaysTrigger = Quartz.TriggerUtils.MakeImmediateTrigger(int.MaxValue, new System.TimeSpan(0, dayNumber * 24, 0, 0)); 

      everyTwoDaysTrigger.StartTimeUtc = System.DateTime.Now.Date; 

      var jobDetail = new Quartz.JobDetail("MainJob", mainJobType); 

      sched.ScheduleJob(jobDetail, everyTwoDaysTrigger); 
     } 
+0

石英v 1.0.3.3 –

0

0 0 0,2,4,6,22 1/2 *? *

嚴格來說,這不是每兩天,而是每月的一,三,五等。

+0

我不能這樣做,因爲我的工作將執行1月31日和2月1日等 – vanilla161

+0

如果你的工作是C#代碼,那麼也許你只需要使用0 0 0,2 ,4,6,22 * *? *在正確的時間安排它(但每天運行),然後修改作業,以便每隔一天它立即返回而不做任何事情。 – sgmoore

相關問題