2017-03-01 3 views
0

Je souhaite effectuer un travail qui prendra beaucoup de temps. Cependant, après 15 minutes, le déclencheur est redémarré avant la fin du travail. Je suppose qu'il s'agit d'un coffre-fort par défaut pour gérer les tâches qui ont échoué. Comment puis-je augmenter ce délai à quelque chose comme 30 minutes?Planificateur Quartz C# - Empêche le travail de réessayer automatiquement après 15 minutes

Voici mon code planificateur d'emploi:

var trigger = TriggerBuilder.Create() 
      .WithIdentity(triggerName, triggerGroup) 
      .WithSchedule(CronScheduleBuilder 
       .CronSchedule(cronExpression).InTimeZone(TimeZoneInfo.Utc)) 
       .Build(); 

var scheduleRequestJob = JobBuilder.Create<T>() 
      .WithIdentity(taskName, taskGroup) 
      .Build(); 

     _scheduler.ScheduleJob(scheduleRequestJob, trigger); 
+0

Il n'y a pas de temps de sécurité en Quartz. Comment est défini le CronTrigger (cronExpression)? – Rabban

+0

@Rabban L'expression cron pour ce travail particulier est "0 30 12? * MON-FRI *". Chaque jour de la semaine à 12h30 –

+0

Historiquement, ceci est géré par la tâche créant un fichier pid/lock et pendant que le fichier de verrouillage est là refusant de commencer une seconde copie – BugFinder

Répondre

0

Quartz n'a pas de temps en toute sécurité Fail. Il y a seulement 2 possibilités que Quartz redéclencherait votre travail.

  1. La durée d'exécution du déclencheur est trop courte et il se déclenchera avant la fin du dernier cycle. Comme nous pouvons le voir sur votre CronExpression, ce n'est pas le cas.
  2. Votre travail lance un JobExecutionException - (Api), cela replanifier votre Job immédiatement.

Pour éviter qu'un emploi est exécuté plusieurs fois en même temps, ajoutez le DisallowConcurrentExecutionAttribute-(Api) à votre classe.

[DisallowConcurrentExecution] 
public class MyJob: IJob 
{ 
} 

Ceci assure le comportement que vous voulez.

+0

Je ne suis pas sûr qu'une exception soit lancée. Il a réessayé 5 fois, exactement 15 minutes après le déclenchement précédent. Heureusement après la 5ème fois le travail s'est terminé en 14 minutes et 16 secondes, donc je n'ai pas réessayé. Est-il possible que quelque chose provoque une exception JobExecutionException après 15 minutes? Ce même travail a été exécuté pendant les derniers mois sans aucun problème. DisallowConcurrentExecution empêchera-t-il le même travail de s'exécuter plus d'une fois? –

+0

@Dan_Dan_Man Oui, cela empêchera cela. Je vais modifier ma réponse pour le rendre plus clair. Le 'JobExecutionException' doit être explicitement lancé par vous pour fonctionner comme décrit. Actuellement, je ne peux pas expliquer pourquoi Quartz essaie de redéclencher votre travail déjà en cours. Assurez-vous que votre Job s'exécute sans exception et ne lance pas 'JobExecutionException'. – Rabban

+0

D'accord, merci. Je vais essayer cela et vous laisser savoir comment ça se passe. Il est possible que des exceptions soient lancées dans mes travaux, mais je ne lance jamais une exception JobExecutionException. Bien que dans cette situation particulière, je ne pense pas qu'aucune exception ait été levée. –