Verarbeitet crond die Sommerzeit um +1 Stunde?

16

Letztes Wochenende mussten wir die Zeit von 02:00 auf 03:00 umstellen.

Frage: Was würde passieren, wenn es um 02:30 Uhr einen Cronjob gäbe?

crond ist eine sehr alte Lösung für die Terminplanung, sie sollte wahrscheinlich damit umgehen, weiß aber nicht wie.

LoukiosValentine79
quelle

Antworten:

18

Es hängt wahrscheinlich von Ihrer Cron-Implementierung ab, aber der beliebte Vixie-Cron besagt im Handbuch:

cron wacht dann jede Minute auf, überprüft alle gespeicherten crontabs und überprüft jeden Befehl, um festzustellen, ob er in der aktuellen Minute ausgeführt werden soll.

und

Besondere Überlegungen gelten, wenn die Uhr um weniger als 3 Stunden geändert wird, z. B. zu Beginn und am Ende der Sommerzeit. Wenn die Zeit vorgerückt ist, werden die Jobs, die in der übersprungenen Zeit ausgeführt worden wären, kurz nach der Änderung ausgeführt. Umgekehrt werden Jobs, die in die wiederholte Zeit fallen, nicht erneut ausgeführt, wenn die Zeit um weniger als 3 Stunden nach hinten verschoben wurde.

Es sind nur Jobs betroffen, die zu einem bestimmten Zeitpunkt ausgeführt werden (weder als @hourly noch mit '*' in der Stunden- oder Minutenangabe). Jobs, die mit Platzhaltern angegeben sind, werden sofort zu der neuen Zeit ausgeführt.

Da die DST-Änderung weniger als 3 Stunden betrug, wurde Ihr Programm kurz nach 3:00 Uhr morgens ausgeführt

Ich bin mir nicht sicher, ob es sich um ein Vixie-Cron-spezifisches Verhalten handelt. Ich scheine mich daran zu erinnern, dass mein PDP-11 auch in den 80er Jahren so funktioniert hat, aber ich bin mir nicht sicher.

Anthon
quelle
2
Wow, Wissen aus den 80ern - Hut ab!
Isaac
Faustregel: Einmal im Jahr werden Ihre Crons in diesem Stundenbereich nicht ausgeführt. einmal im jahr laufen deine crons zweimal. Fazit: Das stimmt nicht immer. Verwandte: Verwenden Sie keine lokalen Zeitzonen mehr!
Tedder42
@tedder42 bitte referenzieren, ihre angaben widersprechen sowohl der dokumentation als auch dem tatsächlichen verhalten von cron.
Anthon
Dieser Einzelfall bezieht sich auf 2 Uhr morgens und 3 Uhr morgens und hat keine Relevanz für die Frage (die sich auf 14:30 Uhr bezieht). Ihre Referenzen könnten interessantes (altes) Verhalten sein, es stimmt nicht mit meiner Erfahrung überein. Der Betrieb eines Servers ohne Zeitzone hat seine eigenen Probleme.
Anthon
2

Die beste Lösung besteht darin, auf Ihrem Computer die Hardware-Uhr auf UTC (koordinierte Weltzeit), AKA GMT oder Zulu Time einzustellen und die Art und Weise der Zeitanzeige nur zu ändern, indem Sie die lokale Zeitzone so einstellen, dass die Sommerzeit aktiviert wird Zeit zu übernehmen.

Wenn unter SUSE Linux und wahrscheinlich bei den meisten anderen das Hardware- Uhrensystem -> Umgebung -> Uhr -> HWCLOCK mit dem Flag -u auf UTC eingestellt ist und Ihre Zeitzone auf den Ort eingestellt ist, an dem Sie sich befinden, zeigt das System automatisch die Ortszeiten an mit Sommerzeitkorrekturen für Sie.

Dies hat eine Reihe von Vorteilen:

  • Sie müssen die Uhr für DST-Änderungen nie wieder manuell einstellen
  • CRON-Tabs werden in UTC-Zeiten gespeichert und ausgeführt
  • Wenn eine Datei, z. B. ein Protokoll, um 01:30 Uhr vor dem Ende der Sommerzeit und eine andere um 01:20 Uhr nach dem Ende der Sommerzeit geschrieben wird, ist diese Datei immer noch "neuer" als die andere, da die Dateizeitstempel UTC und Nur für die Anzeige basierend auf der aktuellen Zeitzone zur Anzeigezeit übersetzt.

Für weitere Informationen geben Sie man hwclockein Terminal ein.

Steve Barnes
quelle
2
Ein kleiner Trottel. UTC ist nicht "Universal Time Constant". UTC bedeutet koordinierte Weltzeit
fpmurphy