¿Crond maneja el horario de verano + 1 hora de cambio?

16

El fin de semana pasado tuvimos que cambiar la hora de 02:00 a 03:00.

Pregunta: ¿Qué pasaría si hubiera un cronjob a las 02:30?

crond es una solución muy antigua para la programación, probablemente debería manejarlo, pero no sé cómo.

LoukiosValentine79
fuente

Respuestas:

18

Probablemente depende de la implementación de su cron, pero el popular cron de Vixie dice en el manual:

cron luego se despierta cada minuto, examina todos los crontabs almacenados, verifica cada comando para ver si debe ejecutarse en el minuto actual.

y

Existen consideraciones especiales cuando el reloj se cambia en menos de 3 horas, por ejemplo al comienzo y al final del horario de verano. Si el tiempo se adelanta, los trabajos que se habrían ejecutado en el tiempo que se omitieron se ejecutarán poco después del cambio. Por el contrario, si el tiempo ha retrocedido menos de 3 horas, los trabajos que caen en el tiempo repetido no se volverán a ejecutar.

Solo se ven afectados los trabajos que se ejecutan en un momento determinado (no especificado como @hora, ni con '*' en el especificador de hora o minuto). Los trabajos que se especifican con comodines se ejecutan en función de la nueva hora inmediatamente.

Como el cambio de horario de verano fue inferior a 3 horas, su programa se ejecutará poco después de las 3:00 a.m.

No estoy seguro de si este es el comportamiento específico de Vixie cron, creo recordar que así fue como mi PDP-11 también funcionó en los años 80, pero no estoy seguro.

Anthon
fuente
2
Wow, conocimiento de los 80 - ¡Me quito el sombrero!
Isaac
regla general: una vez al año, sus crons en ese rango de horas no se ejecutarán. una vez al año tus crons se ejecutarán dos veces. Corolario: esto no siempre es cierto. relacionado: ¡deja de usar zonas horarias locales!
tedder42
@ tedder42 proporcione referencias, sus reclamos contradicen tanto la documentación como el comportamiento real de cron.
Anthon
Ese caso anecdótico hace referencia a las 2am y las 3am y no tiene relevancia para la pregunta (que se refiere a las 2:30) pm. Sus referencias pueden ser comportamientos interesantes (antiguos), no se alinean con mi experiencia. Y ejecutar un servidor sin zona horaria tiene sus propios problemas.
Anthon
2

La mejor solución es hacer que su computadora funcione con el reloj de hardware configurado en UTC, (hora universal coordinada), AKA GMT o hora zulú y solo cambiar la forma en que se muestra la hora configurando la zona horaria local para permitir el ahorro de luz diurna hora de hacerse cargo.

En SUSE Linux, y probablemente en la mayoría de los demás, si el Sistema de reloj de hardware -> Entorno -> Reloj -> HWCLOCK está configurado en UTC con la bandera -u y su zona horaria está configurada donde está, el sistema mostrará automáticamente las horas locales. con correcciones DST para ti.

Esto tiene una serie de ventajas:

  • Nunca más tendrá que ajustar manualmente el reloj para los cambios de horario de verano
  • Las pestañas CRON se almacenarán y ejecutarán a las horas UTC
  • Si un archivo, por ejemplo, un registro, se escribe a las 01:30 antes del final del horario de verano y otro a las 01:20 después del final del horario de verano, ese archivo seguirá siendo "Más nuevo" que el otro porque las marcas de tiempo del archivo serán UTC y recién traducido para su visualización en función de la zona horaria actual en el momento de la visualización.

Para más información escriba man hwclocken una terminal.

Steve Barnes
fuente
2
Una pequeña trampa. UTC no es "Constante de tiempo universal". UTC significa Hora Universal Coordinada
fpmurphy