Quando tentei definir um horário com um cronjob mensal, tive que usar '1. mês'.
Mas isso criou um cronjob para cada mês no dia de hoje, por exemplo.
0 9 18 * * ..... em vez de
0 9 1 * * ..... que dispararia no primeiro dia do mês ...
você está mostrando toda a saída do cron lá? seu primeiro exemplo tem um 9 na casa da hora e 18 no dia.
# .---------------- minuto (0 - 59) # | .------------- hora (0 - 23) # | | .---------- dia do mês (1 - 31) # | | | .------- mês (1 - 12) OU jan, fev, mar, abr ... # | | | | .---- dia da semana (0 - 6) (domingo = 0 ou 7) OU sol, seg, ter, qua, qui, sex, sáb # | | | | | # * * * * * comando a ser executado
não, o resultado completo foi:
0 9 18 * * command
você pode colar seu arquivo schedule.rb? algo parece errado.
every 1.month, :at => "9 AM" do
command "..."
end
Ah, eu vejo o problema (além de eu não ter bons docs nessa área). Quando você usa: às com 1. mês, o dia, a hora e o minuto são analisados a partir da hora. Portanto, quando você usa apenas um horário como 9h, presume que o dia que você quer dizer é hoje.
Uma maneira de corrigir isso é fornecer uma data completa. Admito que parece feio, mas deve funcionar: a cada 1 mês,: às => "1º de janeiro às 9h"
Ele irá ignorar o "janeiro", mas é necessário para uma análise bem-sucedida (o Whenever usa a gema Crônica para analisar datas e horas).
Espero que ajude.
a
Se você não quiser fornecer a data completa, pode tentar algo assim:
a cada 1 mês,: às => "início do mês às 9h"
Isso produzirá o desejado "0 9 1 * *". Isso também manterá seu código um pouco mais limpo :)
Espero que ajude.
-AP
Obrigado Javan.
Como você disse, isso não é bonito, mas funciona!
tsommer ... a solução acima que postei deve funcionar. Não tenho certeza se você olhou para ele.
"início do mês às 9h" - isso manda! obrigado.
Eu preciso expressar este cron job "0 0 27-31 * *". É possível com a sintaxe atual?
Talvez seja melhor fornecer outro método na DSL para passar tarefas cron na sintaxe cron normal, algo como:
cron "0 0 27-31 * *" fazer # ... fim
Eu concordo que uma opção de sintaxe bruta seria boa (patches bem-vindos!). Enquanto isso, você pode fazer isso com uma pitada de Ruby.
every 1.month, :at => (27..31).to_a.map { |d| "12am January #{d}" } do
command "..."
end
Javan obrigado pela resposta rápida.
Atualmente estou usando o seguinte patch. Talvez o regexp precise de algumas melhorias, mas funciona para mim agora.
classe Whenever :: Output :: Cron CRON_EXP = / [^ \ s] + \ s [^ \ s +] \ s [^ \ s] + \ s [^ \ s] + \ s [^ \ s] + / def time_in_cron_syntax case @time quando CRON_EXP então @time quando o símbolo, em seguida, parse_symbol quando String, em seguida, parse_as_string else parse_time fim fim fim
Então eu posso fazer:
cada '0 0 27-31 * *' fazer ... fim
como eu crio a cada 2 meses, final do dia (31), 11 59pm do cron?
a cada 2 meses, a 59 11 L * 0
Comentários muito úteis
Se você não quiser fornecer a data completa, pode tentar algo assim:
a cada 1 mês,: às => "início do mês às 9h"
Isso produzirá o desejado "0 9 1 * *". Isso também manterá seu código um pouco mais limpo :)
Espero que ajude.
-AP