El trabajo de Cron no se inicia después de un cambio de zona horaria

13

He intentado eliminar muchos de los errores comunes,

  1. asegurando que las RUTA estén disponibles para cron

  2. hay una línea final al final del archivo crontab

  3. La zona horaria está configurada por:

    cd /etc
    cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
    

Corriendo dateen bash, obtengo:

Tue Sep 17 15:14:30 SGT 2013

Para verificar si cron está usando el mismo tiempo,

* * * * * date >> date.txt

está dando la misma salida de fecha en date.txt.

Este es el script que estoy tratando de ejecutar:

event.sh:

#!/usr/bin/env bash
echo data > /root/data.txt

Usando crontab -e, la línea de abajo funciona,

* * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

15 * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

Sin embargo, cuando probé algunos otros argumentos, esperando que se ejecute a las 2.50 p.m.

50 14 * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

o

50 14 * * * (cd /root ; ./event.sh >/tmp/debug.log 2>&1)

Ya no funcionará. Parece que hay un problema con mi argumento de hora. Tampoco se pudo encontrar nada en el /tmp/debug.logarchivo.

SOLUCIÓN:

Resultó que tengo que reiniciar el servicio cron después de hacer cambios en TZ.

adsisco
fuente
1
Cualquier error en los registros? ¿Puedes intentar con la ruta absoluta en lugar de ~/event.shintentar/home/username/event.sh
Rahul Patil
1
también hacer pequeñas modificaciones como* * * * * /bin/bash /root/event.sh >/tmp/debuge.log 2>&1
Rahul Patil
1
Usted dice que la zona horaria está configurada correctamente, pero ¿está absolutamente seguro de eso? Intente agregar una entrada como * * * * * datey confirme que datemuestra el tiempo esperado. Tenga en cuenta que la variable de entorno TZ desde dentro del crontab no podría afectar a la zona horaria que utiliza el daemon cron en sí, sino que se afectan a los procesos en marcha a través de cron, por lo que si se establece TZ en su crontab me gustaría sugerir al comentar a cabo temporalmente y establecer la hora usando la zona horaria del reloj del sistema (probablemente UTC si está arrancando Linux de manera única, pero puede ser la hora local).
un CVn
1
Te estás perdiendo el punto, @adsisco. Le pido que elimine cualquier directiva TZ que pueda estar en el crontab y luego vuelva a intentarlo. Eso hará que la fecha se ejecute con la misma TZ que el cron daemon en sí, lo que nos permite ver en qué zona horaria cron quiere los campos de hora. / Etc / localtime solo afecta a la pantalla, no al reloj del sistema, y dudo que afecte a cron. Al hacer esta prueba, podemos estar seguros de que su problema no está relacionado de ninguna manera con las zonas horarias (que francamente me parece).
un CVn
1
en realidad, creo que lo arreglé reiniciando el sistema ... ¿podría ser que tengo que reiniciar el servicio cron después de hacer cambios en TZ? @ MichaelKjörling. ¡GRACIAS! por señalarme a posibles problemas de zona horaria.
adsisco

Respuestas:

7

En primer lugar, las probabilidades de que esté golpeando un error que hace que un campo se considere incorrectamente parece excepcionalmente bajo. Es más probable que sea un malentendido de lo que está sucediendo y de lo que cron espera.

En este caso, descubrimos en los comentarios a la pregunta que probablemente era un problema relacionado con la zona horaria. Para esto, deberías:

  • Agregue una entrada similar * * * * * dateal crontab
  • Elimine (o comente) cualquier asignación de TZ del crontab

Esto obliga datea ejecutarse con la configuración de zona horaria del invocador, lo que significa el demonio cron . Mira la salida; mostrará qué zona horaria está usando internamente el cron y, por lo tanto, es muy probable que en qué zona horaria desee sus campos de tiempo. Si tiene una asignación TZ en el crontab, es posible que la asignación de la variable de entorno TZ pase a invoca comandos pero el cron mismo usa alguna otra zona horaria . Al comentar o eliminar la asignación de TZ, evita esta ambigüedad.

También tenga en cuenta que cualquier cambio en la configuración de la zona horaria global del sistema (incluyendo, por ejemplo, / etc / localtime) casi seguramente requiere al menos un reinicio del cron daemon, y posiblemente (aunque poco probable) un reinicio del sistema para que surta efecto. La edición de la asignación de TZ en el crontab no debería requerir una recarga del cron daemon, ya que debería detectar que el archivo ha sido cambiado y volver a cargarlo automáticamente.

un CVn
fuente