Whenever: Spécifier le jour sur les travaux mensuels

Créé le 18 juin 2009  ·  13Commentaires  ·  Source: javan/whenever

Lorsque j'ai essayé de définir une heure avec un cronjob mensuel, j'ai dû utiliser "1.month".
Mais cela a créé un cronjob pour chaque mois le jour d'aujourd'hui, par exemple.

0 9 18 * * ..... au lieu de
0 9 1 * * ..... qui se déclencherait le premier jour du mois...

Commentaire le plus utile

Si vous ne voulez pas donner la date complète, vous pouvez essayer quelque chose comme ceci :

tous les 1.mois, :at => "début du mois à 9h"
Cela produira le "0 9 1 * *" prévu. Cela gardera également votre code un peu plus propre :)

J'espère que cela pourra aider.

-AP

Tous les 13 commentaires

affichez-vous toute la sortie cron là-bas? votre premier exemple a un 9 dans l'heure et 18 dans la journée.

 # .---------------- minute (0 - 59) 
 # | .------------- heure (0 - 23)
 # | | .---------- jour du mois (1 - 31)
 # | | | .------- mois (1 - 12) OU jan,fév,mar,avr ... 
 # | | | | .---- jour de la semaine (0 - 6) (dimanche=0 ou 7) OU dim,lu,mar,mer,jeu,ven,sam 
 # | | | | |
 # * * * * * commande à exécuter

non, la sortie complète était :

0 9 18 * * command

pouvez-vous coller votre fichier schedule.rb ? quelque chose semble éteint.

every 1.month, :at => "9 AM" do
  command "..."
end

Ah, je vois le problème (autre que moi n'ayant pas de bons docs dans ce domaine). Lorsque vous utilisez :at avec 1.month, le jour, l'heure et la minute sont analysés à partir de l'heure. Ainsi, lorsque vous utilisez simplement une heure comme 9 heures du matin, cela suppose que le jour que vous voulez dire est aujourd'hui.

Une façon de corriger cela est de lui donner une date complète. J'avoue que ça a l'air moche, mais ça devrait marcher : tous les 1.mois, :at => "1er janvier 9h"

Il ignorera le "Janvier", mais il est nécessaire pour une analyse réussie (à chaque fois qu'il utilise la gemme Chronique pour analyser les dates et les heures).

J'espère que cela pourra aider.

les

Si vous ne voulez pas donner la date complète, vous pouvez essayer quelque chose comme ceci :

tous les 1.mois, :at => "début du mois à 9h"
Cela produira le "0 9 1 * *" prévu. Cela gardera également votre code un peu plus propre :)

J'espère que cela pourra aider.

-AP

Merci Javan.

Comme tu dis, ce n'est pas beau mais ça marche !

tsommer... la solution ci-dessus que j'ai postée devrait fonctionner. Je ne sais pas si vous l'avez regardé.

« début du mois à 9h » - ça règle ! Merci.

J'ai besoin d'exprimer cette tâche cron "0 0 27-31 * *". Est-ce possible avec la syntaxe actuelle ?

Peut-être serait-il préférable de fournir une autre méthode dans le DSL pour transmettre les tâches cron dans la syntaxe cron normale, quelque chose comme :

 cron "0 0 27-31 * *" faire
 # ...
 finir

Je suis d'accord qu'une option de syntaxe brute serait bien (les correctifs sont les bienvenus !). En attendant, vous pouvez le faire avec un soupçon de Ruby.

every 1.month, :at => (27..31).to_a.map { |d| "12am January #{d}" } do
  command "..."
end

Javan merci pour la réponse rapide.
Actuellement, j'utilise le patch suivant. Peut-être que l'expression régulière pourrait avoir besoin d'améliorations, mais cela fonctionne pour moi maintenant.

 classe Whenever::Sortie::Cron
 CRON_EXP = /[^\s]+\s[^\s+]\s[^\s]+\s[^\s]+\s[^\s]+/

 def time_in_cron_syntax
 cas @heure
 quand CRON_EXP puis @time
 quand Symbol puis parse_symbol
 quand String puis parse_as_string
 sinon parse_time
 finir
 finir
 finir

Ensuite je peux faire :

 chaque '0 0 27-31 * *' faire
 ...
 finir

comment je crée tous les 2 mois, en fin de journée (31), 11 h 59 do cron?
tous les 2 mois, à 59 11 L * 0

Cette page vous a été utile?
0 / 5 - 0 notes