Changer le fuseau horaire d'un cronjob

10

J'ai un cronjob qui s'exécute tous les jours à 9 h 00 du temps UTC. Je suis en GMT + 1, il s'exécute donc à 10h00, heure locale. Quand il y a le changement de fuseau horaire (à l'heure d'été, DST), le cronjob s'exécute toujours à 9h00 AM UTC mais à 11h00 heure locale. Mais je veux qu'il s'exécute toujours à 10h00, peu importe l'heure d'été ou non. Comment je fais ça?

qailburn
la source
4
Cette question est transposée sur StackOverflow: stackoverflow.com/questions/29592533/…
John1024
Quel est votre fuseau horaire défini dans / etc / timezone?
Twinkles

Réponses:

2

Vérifiez votre paramètre dans / etc / timezone. Dans la question que vous avez mentionnée, vous êtes en "GMT + 1", si c'est ce que votre fuseau horaire est défini, votre script s'exécutera toujours à UTC plus une heure. Si vous le définissez par exemple sur "Europe / Paris", l'heure d'exécution changera avec l'heure d'été.

Scintille
la source
6

Cela dépendra probablement de votre système d'exploitation et de sa mise en œuvre cron. Ce n'est pas possible dans la mise en œuvre de Cron le plus populaire, vixie/isc cron. Du 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
la source
2

En développant @Cyrus, répondez à ce que j'ai fait:

J'ai fait un script qui vérifiait un décalage UTC:

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

Ensuite, j'ajoute deux entrées crontab chacune pour le décalage que je veux:

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
la source
1

Depuis la page de manuel:

Le démon utilisera, s'il est présent, la définition de /etc/timezonepour le fuseau horaire.

L'environnement peut être redéfini dans les définitions crontab de l'utilisateur, mais cron ne traitera les tâches que dans un seul fuseau horaire.

abligh
la source
1

Déplacez votre cronjob à 8h00 et dormez une heure si vous êtes en GMT + 1

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here
Cyrus
la source
Et si votre TZ est en Amérique du Nord?
swdev