tooloora

Cron monatlich am Ersten – 0 0 1 * * erklärt

Ein Lauf pro Monat, am Ersten um Mitternacht – gleichbedeutend mit @monthly. Der letzte Tag des Monats ist der schwierige Fall.

Läuft lokal – nichts wird hochgeladen

Beispiele

Im Klartext

Um 00:00 Uhr, am 1. Tag des Monats.

Feld für Feld

  • 0Minute

    zur Minute 0

    Trifft: 0

  • 0Stunde

    zwischen 00:00 und 00:59 Uhr

    Trifft: 0

  • 1Tag im Monat

    am 1. Tag des Monats

    Trifft: 1

  • *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 1 * * lässt den Auftrag einmal im Monat laufen, am Ersten um 0:00 Uhr. Das dritte Feld legt den Tag im Monat fest, Monat und Wochentag bleiben offen. Der Lauf kommt also zwölfmal im Jahr, gleich auf welchen Wochentag der Erste fällt. Die Kurzform @monthly meint genau diese Zeile.

Wie lasse ich einen Auftrag am letzten Tag des Monats laufen?

Mit dem Tagesfeld allein gar nicht: 0 0 31 * * überspringt jeden Monat mit 30 Tagen und den Februar ganz. Der übliche Kniff ist, täglich zu laufen und das Skript entscheiden zu lassen: 0 23 28-31 * * zusammen mit einer Prüfung wie [ "$(date -d tomorrow +%d)" = "01" ] trifft nur den tatsächlich letzten Tag, welche Zahl er auch trägt.

Was passiert, wenn ich einen Wochentag ergänze?

Er läuft weit häufiger als gedacht. 0 0 1 * 1 bedeutet nicht „am Ersten, sofern es ein Montag ist“ – sind beide Tagesfelder eingeschränkt, verknüpft Cron sie mit ODER, der Auftrag läuft also am Ersten und an jedem Montag, rund fünfmal im Monat. Freitag, der 13., lässt sich in Cron gar nicht ausdrücken; das braucht eine Datumsprüfung im Skript.

Ist der Erste ein guter Tag für monatliche Abrechnungsläufe?

Er ist die naheliegende Wahl und deshalb der vollste Tag: Rechnungen, Berichte, Kontingent-Rücksetzungen und Lizenzprüfungen häufen sich dort, auf der eigenen Maschine wie bei jedem Dienst, den man anspricht. Hängt der Lauf an Daten, die erst nachts vollständig sind, ist der Zweite um 4 Uhr oft der ruhigere und verlässlichere Platz – Cron kennt keinen zweiten Versuch, ein Fehlschlag wartet einen ganzen Monat.

So trägst du den Ausdruck ein

  1. Den Tag ins dritte Feld schreiben und das Wochentagsfeld auf Stern lassen, sonst verdoppelt die ODER-Regel den Plan.
  2. Die Zeile 0 0 1 * * samt Befehl eintragen – oder @monthly, wenn das Datum dauerhaft feststeht.
  3. Für den Monatsletzten 28-31 planen und im Skript prüfen, ob morgen der Erste ist.
  4. Bei Fehlschlag alarmieren: Ein still gescheiterter Monatsauftrag fällt sonst erst im nächsten Quartal auf.

Häufige Fragen

Ist 0 0 1 * * dasselbe wie @monthly?

Ja, die Kurzform steht für genau diese fünf Felder. Beide laufen am Ersten jedes Monats um Mitternacht, zwölfmal im Jahr, gleich auf welchen Wochentag der Tag fällt.

Wie lasse ich einen Auftrag vierteljährlich laufen?

Schränke das Monatsfeld ein: 0 0 1 1,4,7,10 * läuft am Ersten im Januar, April, Juli und Oktober. Die Schrittweite 0 0 1 */3 * ergibt dieselben vier Monate, gerechnet ab Januar.

Warum überspringt mein Auftrag am 31. manche Monate?

Weil diese Monate keinen 31. haben. Cron vergleicht mit einem echten Kalenderdatum, ein auf den 31. gesetzter Auftrag läuft also nur siebenmal im Jahr. Wer den letzten Tag meint, plant 28-31 und prüft im Skript nach.

Verlassen die berechneten Termine meinen Browser?

Nein. Der Ausdruck wird lokal zerlegt und die Daten auf deinem Gerät berechnet; nichts wird hochgeladen, und kein Server erfährt, an welchem Zeitplan du gerade arbeitest.