Whenever: Especifique o dia dos trabalhos mensais

Criado em 18 jun. 2009  ·  13Comentários  ·  Fonte: javan/whenever

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

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

Todos 13 comentários

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

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

tonytonyjan picture tonytonyjan  ·  21Comentários

kovalevsky picture kovalevsky  ·  5Comentários

anthonydahanne picture anthonydahanne  ·  11Comentários

fabianoalmeida picture fabianoalmeida  ·  5Comentários

lgs picture lgs  ·  6Comentários