2011-03-15 4 views
0

Existe-t-il un moyen d'avoir un intervalle de 2 minutes entre chaque exécution d'une tâche rake?Comment exécuter une tâche rake en utilisant cron avec un intervalle de temps entre chaque exécution?

Par exemple:

1:00 PM: Run a rake task 
     Task will usually take 30 seconds to complete, but could take 5 minutes. 
     The task took 3 minutes to complete in this first run. 
1:02 PM: cron has been scheduled to run task every 2 minutes but the previous 
     task has not completed yet, so cron should not run this task right now 
1:03 PM: task has completed 
     cron should wait 2 minutes 
1:05 PM cron should re-run the task 

Répondre

1

Jetez un coup d'œil aux gemmes delayed_jobs ou resque-scheduler.

0

Je suggère de laisser la fin de la tâche elle-même rééchelonner à la fin de celui-ci est géré.

EDIT

Bien que mon (limitée) avec l'expérience Cron provient de plus de 10 il y a quelques années, je suppose que vous pouvez faire Cron ne redémarre pas un emploi si elle est toujours en cours? Vous pouvez donc conserver la programmation de "toutes les x minutes, mais pas si elle est toujours en cours d'exécution", mais à la fin la tâche réinitialise le travail sur "y minutes plus tard".

Ensuite, si la tâche n'arrive PAS à se replanifier elle-même, les installations normales de cron la redémarrent de toute façon "bientôt".

+0

Mais s'il y a des erreurs dans la tâche rake, ce code de "replanification" peut ne pas être exécuté? – Zabba

+0

Vous pouvez sauver des erreurs dans la tâche de rake. Pour replanifier, vous pouvez utiliser la commande 'at'. – taro

1

Au lieu de cron-tab, vous pouvez avoir une boucle infinie (un programme ruby) pour exécuter votre tâche rake. Après l'achèvement de la tâche, utilisez la méthode sleep pour l'arrêter pendant 2 minutes. Et ayez un bloc de secours qui exécutera votre tâche de rake encore en cas d'erreur.

Questions connexes