Whenever: Especificar día en trabajos mensuales

Creado en 18 jun. 2009  ·  13Comentarios  ·  Fuente: javan/whenever

Cuando intenté establecer una hora con un cronjob mensual, tuve que usar '1.month'.
Pero esto creó un cronjob para cada mes del día de hoy, por ejemplo.

0 9 18 * * ..... en lugar de
0 9 1 * * ..... que se dispararía el primer día del mes ...

Comentario más útil

Si no desea dar la fecha completa, puede intentar algo como esto:

cada 1.mes,: a las => "comienzo del mes a las 9 a. m."
Esto producirá el "0 9 1 * *" previsto. También mantendrá su código un poco más limpio :)

Espero que ayude.

-AP

Todos 13 comentarios

¿Estás mostrando toda la salida cron allí? su primer ejemplo tiene un 9 en el lugar de la hora y un 18 en el día.

 # .---------------- minuto (0 - 59) 
 # | .------------- hora (0 - 23)
 # | | .---------- día del mes (1 - 31)
 # | | | .------- mes (1 - 12) O ene, feb, mar, abr ... 
 # | | | | .---- día de la semana (0 - 6) (domingo = 0 o 7) O dom, lun, mar, mié, jue, vie, sáb 
 # | | | | |
 # * * * * * comando a ejecutar

no, el resultado completo fue:

0 9 18 * * command

¿Puedes pegar tu archivo schedule.rb? algo parece fuera de lugar.

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

Ah, veo el problema (aparte de que no tengo buenos documentos en esta área). Cuando usa: at con 1.month, el día, la hora y el minuto se analizan a partir de la hora. Entonces, cuando solo usa un horario como las 9 a. M., Asume que el día al que se refiere es hoy.

Una forma de corregir esto es darle una fecha completa. Admito que esto se ve feo, pero debería funcionar: cada 1.mes,: at => "1 de enero a las 9 a. M."

Ignorará el "enero", pero es necesario para un análisis exitoso (Siempre que use la gema Crónica para analizar fechas y horas).

Espero que ayude.

los

Si no desea dar la fecha completa, puede intentar algo como esto:

cada 1.mes,: a las => "comienzo del mes a las 9 a. m."
Esto producirá el "0 9 1 * *" previsto. También mantendrá su código un poco más limpio :)

Espero que ayude.

-AP

Gracias Javan.

Como dijiste, eso no es atractivo, ¡pero funciona!

tsommer ... la solución anterior que publiqué debería funcionar. No estoy seguro de si lo miraste.

"comienzo del mes a las 9 am" - ¡eso es lo que manda! Gracias.

Necesito expresar este trabajo cron "0 0 27-31 * *". ¿Es posible con la sintaxis actual?

Quizás sería mejor proporcionar otro método en el DSL para pasar trabajos cron en la sintaxis cron normal, algo como:

 cron "0 0 27-31 * *" hacer
 # ...
 fin

Estoy de acuerdo en que una opción de sintaxis sin formato sería buena (¡se aceptan parches!). Mientras tanto, puede hacer esto con una pizca de Ruby.

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

Javan gracias por la rápida respuesta.
Actualmente estoy usando el siguiente parche. Tal vez la expresión regular podría necesitar algunas mejoras, pero ahora me funciona.

 class Siempre que :: Salida :: Cron
 CRON_EXP = / [^ \ s] + \ s [^ \ s +] \ s [^ \ s] + \ s [^ \ s] + \ s [^ \ s] + /

 def time_in_cron_syntax
 caso @hora
 cuando CRON_EXP entonces @time
 cuando Symbol luego parse_symbol
 cuando String luego parse_as_string
 más parse_time
 fin
 fin
 fin

Entonces puedo hacer:

 cada '0 0 27-31 * *' hacer
 ...
 fin

¿Cómo creo cada 2 meses, al final del día (31), a las 11 59 p. m., hacer cron?
cada 2 meses, a las 59 11 L * 0

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

anthonydahanne picture anthonydahanne  ·  11Comentarios

tonytonyjan picture tonytonyjan  ·  21Comentarios

coneybeare picture coneybeare  ·  7Comentarios

sumitsinghnaruka picture sumitsinghnaruka  ·  8Comentarios

fabianoalmeida picture fabianoalmeida  ·  5Comentarios