2017-03-06 9 views
0

私はQuartz.netライブラリのシンプルなスケジューラを使用しています。 私は7種類のトリガーを持っています。シーケンスは次のようなものです。Quartz.netは常に動作するとは限りません

最初:120分ごと。
第2回:12時間ごと。
3番目:5分ごと。
第4回:3分ごと。
第5回:29秒ごと。
第6回:10秒ごと。
7番目:5秒ごと。

ご覧のとおり、少し複雑です。私はこのような問題があります。最初のトリガーは2時間ごとに動作する必要があります。しかし、いくつかの実行後、それはそれだけで停止します。それはまったく動作しません。他の人たちは働いていて、彼らはOKです。 私の悪い英語には申し訳ありません。

private int bultengetir = 120; // min 
    private int baslayanmacsil = 29; //sec 
    private int kuponsonuclandir = 5;//5 min 
    private int canliorangetir = 10; //sec 
    private int canlimacgetir = 7; //sec 
    private int canlimacsil = 12;//hour 
    private int videoeslestir = 3; //min 

    private DateTimeOffset g_bultengetir = DateTimeOffset.UtcNow.AddMinutes(0);//10 
    private DateTimeOffset g_baslayanmacsil = DateTimeOffset.UtcNow.AddMinutes(5);//5 
    private DateTimeOffset g_canlimacgetir = DateTimeOffset.UtcNow.AddMinutes(10);//10 
    private DateTimeOffset g_canliorangetir = DateTimeOffset.UtcNow.AddMinutes(11);//55 
    private DateTimeOffset g_canlimacsil = DateTimeOffset.UtcNow.AddMinutes(12);//5 
    private DateTimeOffset g_kuponsonuclandir = DateTimeOffset.UtcNow.AddMinutes(15);//15 
    private DateTimeOffset g_videoeslestir = DateTimeOffset.UtcNow.AddMinutes(15);//7 

    public void RunJobs() 
    { 
     CanliMaclariGetir(); 
     CanliOranlariGetir(); 
     BultenGetir(); 
     BaslayanMaclariSil(); 
     CanliMaclariSil(); 
     KuponlariSonuclandir(); 
     VideoEslestir(); 
    } 
    private void BultenGetir() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 

      IJobDetail jobdetay = JobBuilder.Create<BultenGetir>() 
       .WithIdentity("bultengetir") 
       .Build(); 
      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInMinutes(bultengetir).RepeatForever()) 
       .StartAt(g_bultengetir) 
       .Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 
      Log log = new Log() 
      { 
       Name = "BultenGetir Görev Emri", 
       Description = "BultenGetir Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "BultenGetir()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 

    } 
    private void BaslayanMaclariSil() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 

      IJobDetail jobdetay = JobBuilder.Create<BaslayanMaclariSil>() 
       .WithIdentity("baslayansil") 
       .Build(); 

      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInSeconds(baslayanmacsil).RepeatForever()) 
       .StartAt(g_baslayanmacsil) 
       .Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 

      Log log = new Log() 
      { 
       Name = "BaslayanMaclariSil Görev Emri", 
       Description = "BaslayanMaclariSil Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "BaslayanMaclariSil()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
    private void KuponlariSonuclandir() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 

      IJobDetail jobdetay = JobBuilder.Create<KuponlariSonuclandir>() 
       .WithIdentity("kuponsonuclandir") 
       .Build(); 
      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInMinutes(kuponsonuclandir).RepeatForever()) 
       .StartAt(g_kuponsonuclandir) 
       .Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 

      Log log = new Log() 
      { 
       Name = "KuponlariSonuclandir Görev Emri", 
       Description = "KuponlariSonuclandir Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "KuponlariSonuclandir()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
    private void CanliOranlariGetir() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 
      IJobDetail jobdetay = JobBuilder.Create<CanliOranlar>() 
       .WithIdentity("canliorangetir") 
       .Build(); 
      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInSeconds(canliorangetir).RepeatForever()).StartAt(g_canliorangetir).Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 

      Log log = new Log() 
      { 
       Name = "CanliOranlariGetir Görev Emri", 
       Description = "CanliOranlariGetir Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "CanliOranlariGetir()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
    private void CanliMaclariGetir() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 
      IJobDetail jobdetay = JobBuilder.Create<CanliMaclar>() 
       .WithIdentity("canlimacgetir") 
       .Build(); 
      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInSeconds(canlimacgetir).RepeatForever()).StartAt(g_canlimacgetir).Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 
      Log log = new Log() 
      { 
       Name = "CanliMaclariGetir Görev Emri", 
       Description = "CanliMaclariGetir Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "CanliMaclariGetir()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
    private void CanliMaclariSil() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 

      IJobDetail jobdetay = JobBuilder.Create<CanliSil>() 
       .WithIdentity("canlimacsil") 
       .Build(); 

      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInHours(canlimacsil).RepeatForever()) 
       .StartAt(g_canlimacsil) 
       .Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 

      Log log = new Log() 
      { 
       Name = "CanliMaclariSil Görev Emri", 
       Description = "CanliMaclariSil Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "CanliMaclariSil()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
    private void VideoEslestir() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 

      IJobDetail jobdetay = JobBuilder.Create<VideoEslestir>() 
       .WithIdentity("videoeslestir") 
       .Build(); 

      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInMinutes(videoeslestir).RepeatForever()) 
       .StartAt(g_videoeslestir) 
       .Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 

      Log log = new Log() 
      { 
       Name = "VideoEslestir Görev Emri", 
       Description = "VideoEslestir Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "videoeslestir()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
+1

ポストにあなたが – Jinish

+0

Quartz.netに実行を使用しているCRON式をウェブサイトのAppPoolにあります。トラフィックがない場合、AppPoolはスリープ状態になり、トリガーは起動されません。プールが再び起動すると、タイマーはリセットされます。または何かが 'bin'フォルダへの変更のように、AppPoolのリサイクルを引き起こしています – VDWWD

+0

Ok、私はソースコードを追加します。 –

答えて

0

私のコメントで述べたように、あなたはあなたが持っているトリガーと同じくらい多くのスケジューラーを使用します。各スケジューラーは自分自身のスレッドプールを10スレッドで使用し、ジョブを実行するスレッドがなくなるため、スレッド同士がブロックされる可能性があります。すべてのトリガーに対して1つのスケジューラーしか必要ありません。あなただけの1スケジューラ

public void RunJobs() 
{ 
    ISchedulerFactory schfack = new StdSchedulerFactory(); 
    IScheduler scheduler = schfack.GetScheduler(); 

    CanliMaclariGetir(scheduler); 
    // ...your other jobs 

    // after scheduling all of your jobs, start the scheduler 
    scheduler.Start(); 
} 

private void CanliMaclariGetir(IScheduler scheduler) 
{ 
    try 
    { 
     IJobDetail jobdetay = JobBuilder.Create<CanliMaclar>() 
      .WithIdentity("canlimacgetir") 
      .Build(); 
     ITrigger trigger = TriggerBuilder.Create() 
      .WithSimpleSchedule(s => s.WithIntervalInSeconds(canlimacgetir).RepeatForever()).StartAt(g_canlimacgetir).Build(); 
     scheduler.ScheduleJob(jobdetay, trigger); 

     Log log = new Log() 
     { 
      Name = "CanliMaclariGetir Görev Emri", 
      Description = "CanliMaclariGetir Görev Emri Verildi.", 
      Start = DateTime.Now, 
      Finish = DateTime.Now, 
      TotalMilliSecond = 0, 
      Type = 6 
     }; 

     DbWork db = new DbWork(); 
     db.LogEkle(log); 
    } 
    catch (Exception ex) 
    { 
     string h_mesaj = ex.Message.ToString(); 
     string icerik = ""; 
     if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
     string h_yer = ex.StackTrace.ToString(); 
     dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "CanliMaclariGetir()", DateTime.Now, h_mesaj, icerik, h_yer); 
    } 
} 

を作成するようにコードを変更することができます

私はまた、あなた自身を繰り返さないために全体のコードを手直しすることをお勧めします。あなたのメソッドはほとんど同じです。あなたはそれを読みやすくするために、あなたのトリガーを作成する方法を使用することができます。

public ITrigger CreateTrigger(TimeSpan timeSpan, string name = "") 
{ 
    return TriggerBuilder.Create() 
     .StartNow() 
     .WithDescription(name) 
     .WithSimpleSchedule(x => x 
      .WithInterval(timeSpan) 
      .RepeatForever()) 
     .Build(); 
} 

コードを最適化するために、残りはあなた次第です;)

+0

ありがとうございます。 –

関連する問題