o
Diese Seite erklärt, wie ein Crontab-Ausdruck aufgebaut ist, was die Sonderzeichen bedeuten und welche Fehler am häufigsten passieren. Mit fertigen Beispielen zum Abschreiben und einem Verzeichnis der Begriffe.
Zum Crontab-Generator: Ausdruck bauen und die nächsten Termine sehen
Ein Cronjob ist eine Aufgabe, die zu festgelegten Zeiten automatisch läuft, ohne dass jemand sie anstößt. Der Name kommt von cron, dem Dienst, der auf Unix-Systemen im Hintergrund läuft und jede Minute nachsieht, was gerade fällig ist. Typische Aufgaben sind nächtliche Sicherungen, das Versenden von Newslettern, das Aufräumen alter Dateien oder das Abholen von Daten aus einer fremden Schnittstelle.
Was zu welchem Zeitpunkt geschehen soll, steht in der Crontab, einer schlichten Textdatei. Jede Zeile darin besteht aus einem Zeitplan und einem Befehl. Der Zeitplan ist der Teil, der die meisten Fragen aufwirft, und um den geht es hier.
Der Zeitplan besteht aus fünf Feldern, getrennt durch Leerzeichen. Sie stehen immer in derselben Reihenfolge, von der kleinsten zur größten Einheit, mit dem Wochentag als Nachzügler am Ende:
*/15 9-17 * * 1-5
│ │ │ │ │
│ │ │ │ └─ Wochentag (0-7)
│ │ │ └───── Monat (1-12)
│ │ └──────── Tag des Monats (1-31)
│ └───────────── Stunde (0-23)
└─────────────────── Minute (0-59)
Gelesen heißt dieser Ausdruck: alle 15 Minuten, zwischen 9 und 17 Uhr, montags bis freitags.
| Feld | Bedeutung | Werte | Hinweis |
|---|---|---|---|
| 1 | Minute | 0-59 |
Die Minute innerhalb der Stunde. |
| 2 | Stunde | 0-23 |
0 ist Mitternacht, 23 ist 23 Uhr. Keine 12-Stunden-Zaehlung. |
| 3 | Tag des Monats | 1-31 |
Der 31. wird in kurzen Monaten schlicht uebersprungen. |
| 4 | Monat | 1-12 |
Statt Zahlen gehen auch JAN bis DEC. |
| 5 | Wochentag | 0-7 |
0 und 7 stehen beide fuer Sonntag. Auch SUN bis SAT sind erlaubt. |
In jedem der fünf Felder sind vier Zeichen erlaubt. Mehr braucht man nicht, und mehr kennt der Unix-Cron auch nicht.
| Zeichen | Name | Bedeutung | Beispiel |
|---|---|---|---|
* |
Jeder Wert | Das Feld wird nicht eingeschraenkt. Steht in allen fuenf Feldern ein Stern, laeuft der Job jede Minute. | * * * * * |
, |
Aufzaehlung | Mehrere einzelne Werte, durch Komma getrennt und ohne Leerzeichen. | 0,15,30,45 * * * * |
- |
Bereich | Von, bis, jeweils einschliesslich der Grenzen. 9-17 meint also auch 9 und 17. | 0 9-17 * * * |
/ |
Schrittweite | Jeder n-te Wert, gezaehlt ab dem kleinsten Wert des Bereichs. */15 ergibt 0, 15, 30 und 45, nicht "alle 15 Minuten ab jetzt". | */15 * * * * |
Für die gängigsten Zeitpläne gibt es Abkürzungen, die anstelle der fünf Felder stehen. Sie sind bequem, aber sie legen den Zeitpunkt fest: @daily ist immer Mitternacht, nicht irgendwann am Tag.
| Kurzform | Entspricht | Bedeutung |
|---|---|---|
@yearly |
0 0 1 1 * |
Einmal im Jahr, am 1. Januar um Mitternacht. @annually bedeutet dasselbe. |
@monthly |
0 0 1 * * |
Am ersten Tag jedes Monats um Mitternacht. |
@weekly |
0 0 * * 0 |
Jeden Sonntag um Mitternacht. |
@daily |
0 0 * * * |
Taeglich um Mitternacht. @midnight bedeutet dasselbe. |
@hourly |
0 * * * * |
Jede Stunde zur vollen Stunde. |
@reboot |
— | Einmalig beim Start des Systems. Das hat keinen Zeitplan und laesst sich bei einem Dienst, der Adressen von aussen aufruft, nicht abbilden. |
Von oben nach unten von häufig zu selten. Der letzte Eintrag ist kein Beispiel, sondern eine Warnung.
| Ausdruck | Läuft |
|---|---|
* * * * * |
Jede Minute. |
*/5 * * * * |
Alle fuenf Minuten, also zur Minute 0, 5, 10 und so weiter. |
*/10 * * * * |
Alle zehn Minuten. |
0 * * * * |
Jede Stunde zur vollen Stunde. |
30 * * * * |
Jede Stunde um halb. |
0 */2 * * * |
Alle zwei Stunden, jeweils zur vollen Stunde. |
5 0 * * * |
Taeglich um 0:05 Uhr. Fuenf Minuten Versatz sind sinnvoll, weil um Punkt Mitternacht sehr viele Jobs starten. |
0 3 * * * |
Taeglich um 3 Uhr nachts. |
15 2 * * * |
Taeglich um 2:15 Uhr. |
0 9-17 * * * |
Stuendlich von 9 bis 17 Uhr, also neun Aufrufe am Tag. |
*/15 9-17 * * 1-5 |
Alle 15 Minuten, von 9 bis 17 Uhr, Montag bis Freitag. |
0 8 * * 1 |
Jeden Montag um 8 Uhr. |
0 8 * * 1,3,5 |
Montag, Mittwoch und Freitag um 8 Uhr. |
0 22 * * 6 |
Jeden Samstag um 22 Uhr. |
0 0 * * 0 |
Jeden Sonntag um Mitternacht. |
0 0 1 * * |
Am ersten Tag jedes Monats um Mitternacht. |
0 4 1,15 * * |
Am 1. und am 15. jedes Monats um 4 Uhr. |
0 0 28-31 * * |
An jedem Tag vom 28. bis 31. Welcher davon der letzte Tag des Monats ist, muss das Skript selbst pruefen. |
0 0 1 1 * |
Einmal im Jahr, am 1. Januar um Mitternacht. |
0 12 1-7 * 1 |
Achtung, eine Falle: nicht "am ersten Montag im Monat", sondern an jedem Tag vom 1. bis 7. UND zusaetzlich an jedem Montag. Siehe Stolpersteine. |
Das ist der haeufigste Fehler ueberhaupt. Sobald in beiden Feldern etwas anderes als ein Stern steht, laeuft der Job an jedem Tag, auf den eine der beiden Angaben passt, nicht nur wenn beide zutreffen. 0 12 1-7 * 1 laeuft also an sieben Tagen am Monatsanfang und zusaetzlich an jedem Montag. Wer wirklich den ersten Montag treffen will, laesst den Cron an allen Tagen 1 bis 7 laufen und bricht im Skript ab, wenn nicht Montag ist.
*/40 im Minutenfeld ergibt die Minuten 0 und 40. Danach ist die Stunde zu Ende, und es geht wieder bei 0 los. Der Abstand ist also 40, dann 20 Minuten. Gleichmaessige Abstaende gibt es nur bei Schrittweiten, die 60 glatt teilen: 2, 3, 4, 5, 6, 10, 12, 15, 20 und 30.
Das Wochentagsfeld geht von 0 bis 7, weil beide Enden Sonntag meinen. Montag ist 1, Samstag ist 6. Wer aus einer anderen Umgebung kommt, in der die Woche bei Sonntag als 1 beginnt, verschiebt seine Jobs sonst um einen Tag.
In einer echten Crontab-Datei hat % eine Sonderbedeutung und muss als \% geschrieben werden. Der Klassiker ist ein Datum im Dateinamen, etwa date +\%Y-\%m-\%d. Ohne Maskierung bricht der Befehl mitten im Datum ab. In einer Adresse, die von aussen aufgerufen wird, tritt das Problem nicht auf.
Ein Cron rechnet in der Zeitzone des Systems. Bei der Umstellung auf Sommerzeit faellt eine Stunde aus, im Herbst kommt sie doppelt. Ein Job, der auf 2:30 Uhr steht, laeuft im Fruehjahr an einem Tag gar nicht und im Herbst zweimal. Wenn das stoert, legen Sie den Job ausserhalb des Zeitfensters zwischen 2 und 3 Uhr.
Steht ein Job auf jede Minute, braucht aber neunzig Sekunden, laufen bald mehrere Kopien parallel. Cron kuemmert das nicht. Wer das verhindern will, setzt im Skript eine Sperre, etwa eine Datei, die zu Beginn angelegt und am Ende geloescht wird, oder eine Sperre in der Datenbank.
Ausdruecke wie 0 0 L * ? fuer den letzten Tag des Monats stammen aus Quartz, dem Zeitplaner der Java-Welt. Der Unix-Cron kennt sie nicht und lehnt sie ab. Dort loest man den letzten Tag des Monats ueber 28-31 und eine Pruefung im Skript.
crontab -e, angezeigt mit crontab -l.*/15 9-17 * * 1-5.timedatectl oder date.Bei Cronjob.de tragen Sie keinen Befehl ein, sondern eine Adresse. Wir rufen sie zum gewünschten Zeitpunkt per HTTP GET auf, so wie es ein Browser täte. Was dann geschieht, entscheidet Ihr Skript auf Ihrem Server. Den Zeitplan können Sie über Auswahlfelder zusammenklicken oder als Crontab-Ausdruck eintippen, genau in der Schreibweise, die auf dieser Seite steht.
Zwei Unterschiede zum Cron auf einem eigenen Server sind wichtig: @reboot lässt sich nicht abbilden, weil es keinen Systemstart gibt, an den sich der Aufruf hängen könnte. Und die Standardausgabe kommt nicht per Mail, sondern steht im Aufrufprotokoll, zusammen mit Laufzeit und Statuscode.
Crontab-Generator · Anleitungen für einzelne Systeme · Ersten Cronjob anlegen · FAQ