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?


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


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.

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

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.


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

Et si votre TZ est en Amérique du Nord?
swdev
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.