Der Cron-Ausdruck 0 0 * * * führt einen Job täglich um Mitternacht aus. Deckt @daily Alias, Zeitzonen-Fallstricke, Sommerzeit Grenzfälle und Nachtjobs ab.
⏰At 12:00 AM
*Beliebiger Wert,Listentrennzeichen-Bereich/Schritt1-5Bereich 1 bis 5*/15Alle 15 EinheitenDer Cron Ausdruck 0 0 * * * führt einen Job in Minute 0 von Stunde 0 (Mitternacht) jeden Tag aus. Alle fünf Felder sind: Minute (0), Stunde (0), Tag des Monats (*), Monat (*), Wochentag (*). Die Platzhalter bedeuten “jeder Wert”, also wird der Job immer dann ausgelöst, wenn Minute=0 und Stunde=0 ist, was einmal alle 24 Stunden um 00:00 passiert.
Die meisten Cron Implementierungen unterstützen @daily als Alias für 0 0 * * *. Es ist auch äquivalent zu @midnight, das einige Implementierungen als zusätzlichen Alias erkennen. Das Verhalten ist identisch: Ausführung zu Beginn jedes Kalendertages.
@daily # unterstützt in Vixie cron, cronie, fcron
@midnight # von einigen Implementierungen als äquivalent zu @daily erkannt
0 0 * * * # funktioniert immer, portabel zwischen allen Cron Implementierungen
Wenn deine crontab von einem Tool verwaltet wird (Ansible, Chef, Puppet, Kubernetes CronJob), überprüfe, ob das Tool @daily oder nur standardmäßige 5-Felder Ausdrücke unterstützt. Kubernetes CronJob unterstützt @daily; einige ältere Systeme nicht.
Cron liest die Zeitzone vom System (/etc/localtime oder TZ Umgebungsvariable). Auf den meisten Cloud VMs ist dies standardmäßig UTC. Auf älteren lokalen Servern kann es eine lokale Zeitzone sein. Gehe nie davon aus, welche du verwendest. Überprüfe mit timedatectl oder date, bevor du dich auf das Mitternachtsverhalten verlässt.
Vixie cron und cronie unterstützen eine TZ Direktive am Anfang der crontab:
TZ=Europe/Berlin
0 0 * * * /opt/jobs/nightly-report
Dies bewirkt, dass der Cron Daemon alle Zeiten in diesem Eintrag mit der angegebenen Zeitzone interpretiert, unabhängig von der Systemzeitzone. Nicht alle Cron Implementierungen unterstützen dies. Überprüfe es vor dem Einsatz in der Produktion.
Stelle deine Server auf UTC ein und führe die Zeitzonenberechnung bei Bedarf in deiner Anwendung durch. Dadurch werden Sommerzeit Überraschungen vollständig vermieden und Log Zeitstempel sind eindeutig.
Sommerzeit Umstellungen betreffen Cron Jobs, die zu Zeiten innerhalb des Uhrenwechsel Fensters geplant sind (typischerweise 02:00 in Regionen mit Sommerzeit). Mitternacht liegt außerhalb dieses Fensters, daher wird ein 0 0 * * * Job von den meisten Sommerzeit Umstellungen nicht direkt beeinflusst.
Wenn du jedoch “Mitternacht” als “Mitternacht in einer lokalen Zeitzone” interpretierst und dein Server auf UTC läuft, musst du das Stundenfeld zweimal jährlich anpassen. Während der Mitteleuropäischen Zeit (MEZ, UTC+1) ist Mitternacht MEZ 0 1 * * * in UTC. Während der Mitteleuropäischen Sommerzeit (MESZ, UTC+2) ist Mitternacht MESZ 0 2 * * * in UTC. Einen der beiden Werte fest zu codieren bedeutet, dass der Job ein halbes Jahr lang still zur falschen Zeit ausgeführt wird.
Die saubere Lösung ist die TZ Direktive (falls unterstützt) oder UTC basierte Server mit Zeitzonenbehandlung auf Anwendungsebene.
Backups laufen typischerweise bei geringster Last. Mitternacht vermeidet Überschneidungen mit dem Geschäftsverkehr, und das Backup ist vor Arbeitsbeginn abgeschlossen. Bei großen Datenbanken versetze den Backup Start um ein paar Minuten nach Mitternacht, um Kollisionen mit anderen Nachtjobs zu vermeiden.
Tägliche Zusammenfassungen für Dashboards, E-Mail Digests oder Analytics Pipelines werden typischerweise berechnet, nachdem die Daten des vorherigen Tages vollständig erfasst wurden. Die Ausführung um Mitternacht stellt sicher, dass der vorherige Tag abgeschlossen ist, bevor der Bericht läuft.
Das Löschen abgelaufener Sitzungen, das Archivieren alter Datensätze oder das Rotieren von Logs sind Aufgaben mit niedriger Priorität, die gut um Mitternacht ausgeführt werden. Wenn die Bereinigung die Leistung beeinträchtigt (Tabellensperren, Index Rebuilds), reduziert die Durchführung außerhalb der Spitzenzeiten die Auswirkungen auf Benutzer.
Extract Transform Load Jobs, die Daten aus externen Quellen abrufen, haben oft tägliche Update Zyklen. Ein Mitternachts Cron stimmt mit der typischen “Tagesgrenze” überein, die von den meisten Datenquellen und Data Warehouses verwendet wird.
Wenn du mehrere tägliche Jobs hast, kann deren Ausführung alle um 0 0 * * * zu Konflikten führen. Verteile sie:
0 0 * * * /opt/jobs/backup-database
15 0 * * * /opt/jobs/generate-reports
30 0 * * * /opt/jobs/sync-external-data
45 0 * * * /opt/jobs/cleanup-temp-files
Jeder Job beginnt 15 Minuten nach dem vorherigen, sodass der frühere Job Zeit hat, abzuschließen (oder zumindest die ressourcenintensivste Phase zu überstehen), bevor der nächste startet.
Um zu sehen, wann 0 0 * * * als nächstes ausgeführt wird:
from croniter import croniter
from datetime import datetime
cron = croniter("0 0 * * *", datetime.now())
for _ in range(7):
print(cron.get_next(datetime))
Auf einem Linux System überprüfe, ob der Job gelaufen ist, mit:
grep CRON /var/log/syslog | grep "dein-job-name"
# oder mit systemd:
journalctl -u cron --since "gestern"
Nothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.