Cron-Syntax verstehen: Beispiele für jeden Anwendungsfall
Cron-Expressions Schritt für Schritt erklärt – mit 10 Praxis-Beispielen vom Minutentakt bis zum letzten Freitag im Monat.
Cron ist seit Jahrzehnten der Standard für zeitgesteuerte Jobs unter Unix – und jeder Entwickler vergisst die Reihenfolge der Felder mindestens einmal pro Quartal. Dieser Artikel zeigt Dir die Syntax und 10 Beispiele, die Du direkt verwenden kannst. Zum interaktiven Testen findest Du unseren Cron-Parser hier.
Aufbau einer Cron-Expression
Die klassische Crontab hat fünf Felder, durch Leerzeichen getrennt:
* * * * *
| | | | |
| | | | +----- Wochentag (0-6, Sonntag = 0 oder 7)
| | | +-------- Monat (1-12)
| | +----------- Tag im Monat (1-31)
| +-------------- Stunde (0-23)
+----------------- Minute (0-59)Sonderzeichen
*– jeder mögliche Wert,– Aufzählung:1,15,30-– Bereich:9-17/– Schrittweite:*/5heißt "jede 5."?– "egal" (nur in Quartz/AWS, nicht in Standard-Cron)
10 Praxis-Beispiele
| Cron-Expression | Bedeutung | Anwendungsfall |
|---|---|---|
* * * * * | Jede Minute | Heartbeat, Health-Check |
*/5 * * * * | Alle 5 Minuten | Polling externer APIs |
15 * * * * | Stündlich um :15 | Cache-Invalidierung |
30 2 * * * | Täglich um 02:30 | Nightly Backup |
0 9 * * 1-5 | Werktags 09:00 Uhr | Daily-Standup-Reminder |
0 0 * * 0 | Sonntag Mitternacht | Wöchentlicher Report |
0 0 1 * * | Erster Tag im Monat 00:00 | Rechnungslauf |
0 23 * * 5 | Jeden Freitag 23:00 | Wochenend-Deploy-Sperre |
*/15 9-17 * * 1-5 | Alle 15 Min, 9–17 Uhr, Mo–Fr | Geschäftszeiten-Sync |
0 */6 * * * | Alle 6 Stunden | Index-Rebuild |
"Letzter Freitag im Monat" – nicht trivial
Standard-Cron kann das nicht direkt. In Quartz schreibst Du 0 0 0 ? * 6L (L = last). Mit klassischer Crontab brauchst Du einen Workaround: täglich um Mitternacht laufen, im Skript prüfen ob heute der letzte Freitag ist, sonst sofort beenden:
0 0 * * 5 [ "$(date -d '+7 days' +\%m)" != "$(date +\%m)" ] && /pfad/zum/job.shStolperfallen
Tag-of-Month UND Day-of-Week
Wenn Du beide Felder setzt, wird mit ODER verknüpft, nicht mit UND.0 0 1 * 1 läuft am 1. jedes Monats oder jeden Montag – nicht nur an einem 1., der ein Montag ist. Das ist eine der häufigsten Bug-Quellen.
Timezone
Die meisten Cron-Daemons laufen in der Server-Timezone, oft UTC. Wenn Dein Backup "um 3 Uhr nachts" laufen soll, prüfe ob das UTC oder lokale Zeit ist. Bei Sommerzeit-Umstellung kann ein Job zweimal oder gar nicht laufen – plane Jobs nicht zwischen 02:00 und 03:00 Uhr lokaler Zeit.
6 Felder mit Sekunden
Quartz, Spring @Scheduled, AWS EventBridge und einige andere nutzen 6 Felder mit Sekunden vorn:0 0 12 * * ?= täglich 12:00:00. Wenn Du eine 5-Feld-Expression in ein 6-Feld-System kopierst, läuft der Job "jede Sekunde im X-ten Y..." – ein klassischer Production-Bug.
Lesbare Aliase
Viele Cron-Dialekte unterstützen Aliase: @hourly, @daily, @weekly, @monthly, @yearly, @reboot. Bei wartungsintensiven Crontabs sind sie ein Lesbarkeits-Gewinn, allerdings nicht überall verfügbar.