Server-UTC vs. lokale Zeit, TZ festlegen
Der cron-Ausdruck selbst enthält keine Zeitzoneninformation. Der Zeitpunkt, auf den ein Ausdruck verweist, richtet sich nach der Zeitzone des Systems, auf dem cron läuft. Deshalb kann derselbe 0 9 * * * je nach Serverzeitzone zu einem anderen tatsächlichen Zeitpunkt ausgeführt werden.
Viele Server und Container haben UTC als Standardzeitzone. Da Korea (KST) UTC+9 ist, wird eine mit 0 0 * * * (Mitternacht) geplante Aufgabe auf einem UTC-Server tatsächlich um 9 Uhr morgens koreanischer Zeit ausgeführt. Es kommt sehr häufig vor, dass man in lokaler Zeit denkt und plant und dann um 9 Stunden danebenliegt.
Manche cron-Implementierungen erlauben es, oben in der crontab eine Zeile wie CRON_TZ=Asia/Seoul zu setzen, damit die Auswertung in einer bestimmten Zeitzone erfolgt. In einer Container-Umgebung stellt man dazu auch die TZ-Umgebungsvariable des Images oder /etc/localtime auf die gewünschte Region ein. Ob dies unterstützt wird, hängt jedoch von der Implementierung ab und sollte überprüft werden.
In Regionen mit Sommerzeit (DST) kann an den Tagen, an denen die Uhr vor- oder zurückgestellt wird, ein bestimmter Zeitpunkt übersprungen werden oder zweimal auftreten, sodass in dieser Zeitzone geplante Aufgaben ausgelassen oder doppelt ausgeführt werden können. Plant man wichtige Aufgaben nach UTC, lassen sich solche Probleme vermeiden.
Praxistipp: Denken Sie Ausdrücke in UTC und prüfen Sie unbedingt die tatsächliche Zeitzone der Deployment-Umgebung. Zur Orientierung: Die nächsten Ausführungszeitpunkte, die das Tool dieser Website anzeigt, beziehen sich auf die lokale Zeitzone Ihres Browsers, sodass Sie sie zum Vergleich mit der Serverzeitzone heranziehen können.