tooloora

Cron täglich um Mitternacht – 0 0 * * * erklärt

Mitternacht ist 0:00 Uhr, die erste Minute des neuen Tages – und genau daran scheitern datumsbezogene Auswertungen.

Läuft lokal – nichts wird hochgeladen

Beispiele

Im Klartext

Um 00:00 Uhr, jeden Tag.

Feld für Feld

  • 0Minute

    zur Minute 0

    Trifft: 0

  • 0Stunde

    zwischen 00:00 und 00:59 Uhr

    Trifft: 0

  • *Tag im Monat

    an jedem Tag des Monats

    Trifft: 1, 2, 3, 4, 5, 6 … 31

  • *Monat

    in jedem Monat

    Trifft: Jan, Feb, Mär, Apr, Mai, Jun … Dez

  • *Wochentag

    an jedem Wochentag

    Trifft: So, Mo, Di, Mi, Do, Fr, Sa

Nächste Ausführungen

Termine werden berechnet …

Diese Termine gelten in der Zeitzone, die auf dem Server eingestellt ist. Cron rechnet nichts um; die Vorschau hier nutzt die Uhr deines Geräts.

Der Ausdruck bleibt in deinem Browser – er wird nie an einen Server gesendet.

Weitere Ausdrücke

0 0 * * * lässt den Auftrag einmal täglich um Mitternacht laufen, also um 0:00 Uhr – in der ersten Minute des neuen Tages, nicht in der letzten des alten. Minute und Stunde stehen auf null, Tag, Monat und Wochentag bleiben offen. Die Kurzformen @daily und @midnight meinen dieselbe Zeile.

Zu welchem Tag gehört der Mitternachtslauf?

Zum neuen. Ein Auftrag, der am Dienstag um 0:00 Uhr startet, sieht das Datum des Dienstags. Eine Auswertung, die den Montag zusammenfassen soll, muss also ausdrücklich einen Tag abziehen, etwa mit date -d yesterday. Dieser eine Versatz erzeugt mehr leere Berichte als jeder andere Cron-Fehler, denn das Skript läuft fehlerfrei und sieht nur auf einen Tag, der kaum begonnen hat.

Ist Mitternacht ein guter Zeitpunkt für Sicherungen?

Es ist der vollste Zeitpunkt auf den meisten Maschinen: Log-Rotation, Datenbank-Abzüge, Aufräumaufträge und die halbe Welt starten um 0:00 Uhr. Wenn deine Sicherung mit all dem konkurriert, dauert sie länger und trifft eher auf eine gesperrte Datei. Ein Wechsel auf 2:30 oder 3:15 Uhr bringt meist ein ruhigeres Fenster, ohne einen Nachteil.

Was, wenn die Maschine um Mitternacht aus ist?

Klassisches Cron lässt den Lauf einfach ausfallen; es merkt sich verpasste Aufträge nicht. Laptops und Büro-Rechner brauchen deshalb anacron, das den letzten erfolgreichen Lauf festhält und nach dem Hochfahren nachholt, oder einen systemd-Timer mit Persistent=true. Auf einem durchlaufenden Server spielt das keine Rolle – und genau deshalb überrascht es alle, die einen Auftrag auf einen Arbeitsplatzrechner verschieben.

So trägst du den Ausdruck ein

  1. Zuerst klären, ob der Auftrag die Daten von gestern braucht; wenn ja, das Datum im Skript berechnen statt sich auf den Lauftag zu verlassen.
  2. Die Zeile 0 0 * * * samt Befehl eintragen – oder @daily, wenn die Datei ohnehin nur von Menschen gelesen wird.
  3. Bei einem schweren Auftrag über eine ruhigere Zeit wie 0 2 * * * nachdenken.
  4. Start- und Endzeit protokollieren, damit später erkennbar ist, ob ein Lauf ausgefallen ist.

Häufige Fragen

Ist 0 0 * * * dasselbe wie @daily?

Ja, und ebenso wie @midnight; alle drei beschreiben einen Lauf pro Tag um 0:00 Uhr. Die ausgeschriebene Fassung lässt sich später leichter anpassen, etwa wenn du merkst, dass 3 Uhr ruhiger wäre.

Läuft der Auftrag auch am Monatsersten?

Ja. Tag, Monat und Wochentag stehen auf Stern, also ist kein Kalendertag ausgenommen. Erst eine Einschränkung im Tagesfeld macht daraus einen Monatsauftrag, zum Beispiel 0 0 1 * * für den Ersten jedes Monats.

Wie stelle ich sicher, dass nur eine Kopie läuft?

Den Befehl mit flock -n auf eine Sperrdatei einpacken. Für einen täglichen Auftrag, der sonst Minuten braucht, ist das eine billige Versicherung gegen die eine Nacht, in der die Datenbank langsam ist und der Lauf sich selbst überholt.

Wo werden die nächsten Termine berechnet?

Vollständig in deinem Browser. Die Seite bringt den gesamten Parser mit, dein Ausdruck bleibt also auf dem Gerät; es gibt keine Anfrage an einen Server, kein Logging und keine Auswertung deiner Eingaben.