Cambiar la zona horaria de un cronjob

10

Tengo un cronjob que se ejecuta todos los días a las 9:00 a.m. de UTC-Time. Estoy en GMT + 1, por lo que se ejecuta a las 10:00 a.m., hora local. Cuando hay un cambio de zona horaria (al horario de verano, DST), el cronjob se ejecuta aún a las 9:00 a.m. de la hora UTC pero a las 11:00 a.m. hora local. Pero quiero que siempre se ejecute a las 10:00, sin importar el horario de verano o no. ¿Cómo puedo hacer eso?

qailburn
fuente
44
Esta pregunta se publica en StackOverflow: stackoverflow.com/questions/29592533/…
John1024
¿Cuál es su zona horaria establecida en / etc / timezone?
Twinkles el

Respuestas:

2

Verifique su configuración en / etc / timezone. En la pregunta que mencionó que está en "GMT + 1", si esa es la zona horaria establecida, su script siempre se ejecutará a las UTC más una hora. Si lo configura, por ejemplo, "Europa / París", el tiempo de ejecución cambiará con el horario de verano.

Centelleos
fuente
6

Esto probablemente dependerá de su sistema operativo y su implementación cron. Esto no es posible en la ejecución de cron más popular, vixie/isc cron. De la crontab(5) manpage:

LIMITATIONS
       The  cron  daemon  runs with a defined timezone. It currently does not 
       support per-user timezones. All the tasks: system's and user's will 
       be run based on the configured timezone. Even if a user specifies  
       the TZ  environment  variable  in  his crontab this will affect only 
       the commands executed in the crontab, not the execution of the crontab 
       tasks themselves.
jordanm
fuente
2

Expandir en @Cyrus responder esto es lo que hice:

Hice un script que verificó un desplazamiento UTC:

#!/bin/bash
export TZ=":US/Eastern"
if [ "$(date +%z)" == "$1" ]; then
  shift
  exec $@
fi

Luego agrego dos entradas crontab cada una para el desplazamiento que quiero:

0 8 * * * run-only-with-tz.sh -0400 place_your_command_here
0 9 * * * run-only-with-tz.sh -0500 place_your_command_here
Sukima
fuente
1

Desde la página del manual:

El demonio usará, si está presente, la definición de /etc/timezonela zona horaria.

El entorno se puede redefinir en las definiciones de crontab del usuario, pero cron solo manejará las tareas en una única zona horaria.

abligh
fuente
1

Mueva su cronjob a las 8:00 y duerma una hora si está en GMT + 1

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here
Ciro
fuente
¿Qué pasa si su TZ es Norteamérica?
swdev