Warum laufen Cronjobs zur falschen Zeit?

10

Ich habe Cronjobs eingerichtet, die täglich auf meinem Ubuntu-Server ausgeführt werden.

z.B. 0 4 * * * Befehl

Sie laufen, außer sie laufen 8 Stunden früher. Beim Einrichten des Servers wurde ursprünglich die UTC-Zeit eingestellt. Ich lief sudo dpkg-reconfigure tzdata, um den Server auf CST zu setzen, was 6 Stunden hinter UTC liegt. Interessanterweise bin ich in PST, das 8 Stunden hinter UTC liegt, aber ich sehe nicht, wie der Server das wissen könnte.

Wenn ich den Befehl ausführe date, wird die Uhrzeit in CST angezeigt.

Es muss einen Ort geben, an dem die Zeit falsch konfiguriert ist. Wo kann ich suchen, um das zu lösen?

Matt McCormick
quelle

Antworten:

21

Haben Sie daran gedacht, cron nach dem Ändern Ihrer Zeitzone neu zu starten? Wenn nicht, hat cron möglicherweise noch seine alte Vorstellung von der Zeitzone, als es ursprünglich gestartet wurde.

Obwohl dies nicht unbedingt erforderlich ist, empfehle ich normalerweise, einen Computer nach dem Ändern der Zeitzone neu zu starten. Die Zeitzone eines Servers sollte sich niemals ändern (oder zumindest SEHR selten sein). Dies garantiert, dass jedes Programm auf dem Server neu gestartet wurde und weiß von der Änderung :-)

voretaq7
quelle
Nein, ich habe nicht neu gestartet. Ich habe das getan und werde abwarten, ob das das Problem ist (was ich denke, dass es sein kann).
Matt McCormick
Nach dem Neustart des Cron-Dienstes wird er jetzt zur gleichen Zeit mit der Zeitzone ausgeführt, die ich mit tzdata festgelegt habe. Vielen Dank.
Donny Kurnia
1
Ich habe festgestellt, dass die Einträge in / var / log / cron auch nach dem Neustart von crond die falsche Zeit anzeigen. Durch einen Neustart von rsyslog wurde dieses Problem behoben.
Zymhan
@WildVelociraptor Ja, Syslog verwendet bis zum Neustart auch die alten Zeitzonendaten (daher werden Zeitfehler falsch angezeigt, obwohl sie zum richtigen Zeitpunkt ausgeführt werden). Alles andere, was lange läuft und gestartet wurde, bevor sich die Zeitzonendaten geändert haben, zeigt ein ähnliches Verhalten, weshalb im Allgemeinen ein Neustart angezeigt wird.
voretaq7
6

Für mich stellte ich fest, dass hwclockdie Zeit beim Ausführen des Befehls eine Stunde anders war als beim Ausführen des dateBefehls. Um dies zu beheben, können Sie einen Anruf hwclock --systohctätigen, der die beiden Male synchronisiert und die Cronjobs zur erwarteten Zeit ausführt.

Ajon
quelle
In meinem Fall beide dateund hwclockidentische Zeit melden, aber cron macht immer noch nicht das, was ich erwarten würde.
unfa