Zeitzonenproblem mit Cron


11

Meine Cron-Jobs werden eine Stunde später im Vergleich zur Serverzeit berechnet. Ich verstehe nicht, was los ist.

Meine Konfiguration ist die folgende:

Serverzeit :

Europe/Paris

In / etc / default / cron habe ich folgende Zeile hinzugefügt:

TZ="Europe/Paris"

Trotzdem werden Cron-Jobs eine Stunde später als die Serverzeit gestartet. Was wirklich schwierig ist, ist, dass wenn ich cron auffordere, die Anweisung "Datum" zu spielen, das Serverdatum angegeben wird (das gute!).

Ich habe keine Ahnung, wie ich dieses Problem lösen kann. Ich habe in Foren gelesen, aber nichts Interessantes gefunden.

Was denkst du ?


4
Daher werden in UTC Cron-Jobs geplant. Auf der Manpage von Vixie cron heißt es: "Der Dämon verwendet, falls vorhanden, die Definition aus / etc / timezone für die Zeitzone." Was ist drin /etc/timezone? Haben Sie /etc/timezonekürzlich Änderungen vorgenommen , als der cronProzess gestartet wurde? Hast du es versucht /etc/init.d/cron restart?
Keith Thompson

3
/ etc / timezone wurde kürzlich geändert, ohne /etc/init.d/cron neu zu starten. Ich werde versuchen, es neu zu starten.
Guillaume Lebourgeois

Antworten:


16

(Kopieren meines Kommentars als Antwort, da es sich als Lösung herausstellte; ich habe richtig geraten.)

Daher werden Cron-Jobs in UTC geplant ( Europe/Parisein Versatz von einer Stunde gegenüber UTC).

Die Vixie Cron Manpage sagt:

Der Daemon verwendet, falls vorhanden, die Definition aus / etc / timezone für die Zeitzone.

Was ist drin /etc/timezone? Haben Sie /etc/timezonekürzlich Änderungen vorgenommen , als der Cron-Prozess gestartet wurde? Hast du es versucht

/etc/init.d/cron restart

?


3

Einige Distributionen wie Fedora bieten einen Mechanismus, mit dem Sie festlegen können CRON_TZ=, dass Ihre Standardzeitzone überschrieben wird.

Von der Fedora man 5 crontab

Die Variable CRON_TZ gibt die Zeitzone an, die für die Cron-Tabelle spezifisch ist. Der Benutzer sollte eine Zeit gemäß der angegebenen Zeitzone in die Tabelle eingeben. Die zum Schreiben in eine Protokolldatei verwendete Zeit wird der lokalen Zeitzone entnommen, in der der Dämon ausgeführt wird.

Etwas wie das:

#m  h           d   m   wday    command
CRON_TZ="Europe/Paris"
5   0,6,12,18   *   *   *       /path/to/script.bash

1

Wikipedia sagt

Die meisten Cron-Implementierungen interpretieren Crontab-Einträge einfach in der Systemzeitzoneneinstellung, unter der der Cron-Daemon selbst ausgeführt wird. Dies kann zu Streitigkeiten führen, wenn ein großer Mehrbenutzercomputer Benutzer in mehreren Zeitzonen hat, insbesondere wenn die Standardzeitzone des Systems die möglicherweise verwirrende Sommerzeit enthält. Daher kann eine Cron-Implementierung in jedem Fall beliebige Umgebungsvariablen-Einstellzeilen "TZ =" in Benutzer-Crontabs interpretieren, die nachfolgende Crontab-Einträge relativ zu dieser Zeitzone interpretieren

Vielleicht hat Ihre Login-ID eine TZ-Einstellung, die sich von der TZ-Einstellung des Systems unterscheidet?


1

Cron neu zu starten war das, was ich brauchte, aber für mich war der Befehl

/etc/init.d/crond restart (crond not cron)

0

Habe das gerade auf Ubuntu 14/16 herausgefunden. Hat perfekt für mich funktioniert.

Schritte (Sudo impliziert):

  1. cat /etc/timezone
  2. rm -fv /etc/localtime
  3. ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
  4. apt install -y --reinstall tzdata
  5. /etc/init.d/rsyslog restart
  6. tail -f /var/log/syslog
  7. cat /etc/timezone

Wo wird cronneu gestartet?
DavidPostill

Ich musste cron nicht neu starten.
Varun Chandak
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.