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...
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
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