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