Entwicklung · 3 Min. Lesezeit ·

Cron-Ausdrücke erklärt, mit 10 sofort nutzbaren Beispielen

Fünf Felder, vier Symbole und eine Zeitzonen-Falle. So liest und schreibst du Cron-Zeitpläne, mit Beispielen zum Kopieren.

Cron ist der Planer hinter Backups, Berichten und Aufräumjobs auf Servern weltweit, und seine Syntax steckt auch in GitHub Actions, Kubernetes-CronJobs und den meisten Cloud-Planern. Ein Zeitplan besteht aus fünf Feldern, getrennt durch Leerzeichen.

┌ Minute (0-59)
│ ┌ Stunde (0-23)
│ │ ┌ Tag im Monat (1-31)
│ │ │ ┌ Monat (1-12)
│ │ │ │ ┌ Wochentag (0-6, 0 = Sonntag)
* * * * *

Vier Symbole

* bedeutet jeder Wert. Ein Komma bildet eine Liste (1,15), ein Bindestrich einen Bereich (1-5) und ein Schrägstrich eine Schrittweite (*/15 = alle 15 Einheiten). Mit diesen vier lässt sich fast jeder Zeitplan ausdrücken.

10 Beispiele

*/5 * * * *       alle 5 Minuten
0 * * * *         jede volle Stunde
0 9 * * *         täglich um 09:00
30 2 * * *        jede Nacht um 02:30
0 9 * * 1-5       werktags um 09:00
0 18 * * 5        freitags um 18:00
0 0 1 * *         Mitternacht am 1. jedes Monats
0 0 1 1 *         einmal im Jahr, am 1. Januar
0 */6 * * *       alle 6 Stunden
15 8,12,17 * * *  täglich um 08:15, 12:15 und 17:15

Falle 1: Tag im Monat und Wochentag

Sind beide Felder eingeschränkt, startet das klassische Cron den Job, wenn eines von beiden passt. 0 0 1 * 1 läuft am 1. jedes Monats und zusätzlich jeden Montag, nicht nur an Montagen, die auf den 1. fallen.

Falle 2: die Zeitzone

Cron hat keine eigene Zeitzone. Der Job läuft in der Zeitzone der Maschine oder des Dienstes, der ihn ausführt, und das ist oft UTC. Ein Job mit 0 9 * * * auf einem UTC-Server läuft um 09:00 UTC, bei dir also womöglich Stunden früher oder später, und die Sommerzeit kann ihn noch einmal verschieben.

Falle 3: überlappende und verpasste Läufe

Cron startet einen Job pünktlich, egal ob der vorige Lauf fertig ist. Ein Backup alle 5 Minuten, das 7 Minuten dauert, läuft am Ende zweimal gleichzeitig. Schütze lange Jobs mit einer Sperre (unter Linux erledigt flock das in einer Zeile) oder sorge dafür, dass sie parallel laufen dürfen. Cron holt außerdem nichts nach: Ist der Rechner um 02:30 aus, läuft der 02:30-Job in dieser Nacht einfach nicht.

*/5 * * * *  flock -n /tmp/backup.lock /usr/local/bin/backup.sh

Kurzformen und kleine Unterschiede

Viele Cron-Implementierungen akzeptieren Kurzformen wie @hourly, @daily, @weekly, @monthly und @reboot statt fünf Feldern. Meist darf der Sonntag als 0 oder 7 geschrieben werden, und Namen wie MON oder JAN sind erlaubt. Die Plattformen unterscheiden sich im Detail, also prüfe die Dokumentation des Systems, das den Job ausführt, besonders bei verwalteten Cloud-Schedulern.

Wohin geht die Ausgabe?

Standardmäßig schickt Cron die Ausgabe eines Jobs per Mail an den lokalen Benutzer, was auf den meisten Servern heißt: Sie verschwindet. Leite die Ausgabe in eine Logdatei oder dein Logging-System um, damit ein fehlschlagender Job Spuren hinterlässt:

30 2 * * *  /usr/local/bin/report.sh >> /var/log/report.log 2>&1

Vor dem Deployment prüfen

Füge einen Ausdruck in den Cron-Ausdruck-Erklärer von 4Dev ein, und er liest dir den Zeitplan in Klartext vor. Er versteht das übliche Fünf-Felder-Format; Ausdrücke mit sechs oder sieben Feldern für Sekunden oder Jahre, wie bei Quartz oder Spring, werden mit einer Fehlermeldung abgelehnt.

Cron-Ausdruck-Erklärer öffnen

LinkedInXFacebook