2017-03-06 13 views
0

Ich verwende den einfachen Scheduler der Quartz.net-Bibliothek. Ich habe 7 verschiedene Auslöser. Die Reihenfolge ist so.Quartz.net funktioniert nicht immer

Zuerst: alle 120 Minuten.
Zweitens: alle 12 Stunden.
Drittens: alle 5 Minuten.
Viertens: alle 3 Minuten.
Fünfte: alle 29 Sekunden.
Sechstens: alle 10 Sekunden.
Siebtens: alle 5 Sekunden.

Es ist ein bisschen kompliziert, wie Sie es sehen. Ich habe ein Problem wie dieses. First Trigger muss alle zwei Stunden arbeiten. Aber nach ein paar Läufen stoppt es von selbst. Es funktioniert überhaupt nicht. Die anderen arbeiten und sie sind in Ordnung. Es tut mir leid für mein schlechtes Englisch.

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

Beitrag der Cron-Ausdrücke, die Sie verwenden – Jinish

+0

Quartz.net läuft im AppPool der Website. Wenn kein Datenverkehr vorhanden ist, wird der AppPool in den Ruhezustand versetzt und die Trigger werden nicht ausgelöst. Wenn der Pool wieder gestartet wird, wird der Timer zurückgesetzt. Oder etwas anderes verursacht eine Wiederverwendung des AppPools, wie Änderungen am Ordner "bin" – VDWWD

+0

Ok, ich füge Quellcode hinzu. –

Antwort

0

Wie ich in meinen Kommentaren erwähnt, verwenden Sie zur Zeit so viele Disponenten als Auslöser Sie haben. Jeder Scheduler wird seinen eigenen Threadpool mit 10 Threads verwenden und es könnte möglich sein, dass Ihre Threads gegenseitig blockiert werden, da es keine Threads mehr gibt, um Ihre Jobs auszuführen. Sie benötigen nur einen Scheduler für alle Ihre Trigger.

Sie können den Code ändern, nur einen Scheduler

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

ich auch, dass Sie den ganzen Code selbst nicht zu wiederholen arbeiten würde erstellen empfehlen. Deine Methoden machen fast dasselbe. Sie können eine Methode verwenden, um Ihre Auslöser zu schaffen, um sie besser lesbar zu machen:

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

Der Rest der Code zu optimieren, ist bis zu Ihnen;)

+0

Vielen Dank. –