Ändern Sie die Zeitzone eines Cronjobs

10

Ich habe einen Cronjob, der jeden Tag um 9:00 Uhr UTC-Zeit ausgeführt wird. Ich bin in GMT + 1, daher wird es um 10:00 Uhr Ortszeit ausgeführt. Wenn sich die Zeitzone ändert (auf Sommerzeit, Sommerzeit), wird der Cronjob immer noch um 9:00 Uhr UTC-Zeit, aber um 11:00 Uhr Ortszeit ausgeführt. Aber ich möchte, dass es immer um 10:00 Uhr ausgeführt wird, egal ob im Sommer oder nicht. Wie mache ich das?

Qailburn
quelle
4
Diese Frage ist bei StackOverflow
gekreuzt
Was ist Ihre Zeitzone in / etc / timezone?
Twinkles

Antworten:

2

Überprüfen Sie Ihre Einstellung in / etc / timezone. In der Frage, die Sie erwähnt haben, befinden Sie sich in "GMT + 1". Wenn dies Ihre Zeitzone ist, wird Ihr Skript immer um UTC plus eine Stunde ausgeführt. Wenn Sie z. B. "Europa / Paris" einstellen, ändert sich die Ausführungszeit mit der Sommerzeit.

Funkeln
quelle
6

Dies hängt wahrscheinlich von Ihrem Betriebssystem und dessen Implementierung ab cron. Dies ist in der gängigsten Cron-Implementierung nicht möglich vixie/isc cron. Aus dem 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
quelle
2

Wenn ich @Cyrus beantworte, antworte ich wie folgt:

Ich habe ein Skript erstellt, das einen UTC-Offset überprüft:

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

Dann füge ich jeweils zwei Crontab-Einträge für den gewünschten Offset hinzu:

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
quelle
1

Von der Handbuchseite:

Der Daemon verwendet, falls vorhanden, die Definition von /etc/timezonefür die Zeitzone.

Die Umgebung kann in den Crontab-Definitionen des Benutzers neu definiert werden, aber Cron behandelt Aufgaben nur in einer einzigen Zeitzone.

abligh
quelle
1

Verschieben Sie Ihren Cronjob auf 8:00 und schlafen Sie eine Stunde, wenn Sie in GMT + 1 sind

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here
Cyrus
quelle
Was ist, wenn Ihre TZ Nordamerika ist?
Swdev