NetLabToolsNetLabTools

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.

6 Min. Lesezeit

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: */5 heißt "jede 5."
  • ? – "egal" (nur in Quartz/AWS, nicht in Standard-Cron)

10 Praxis-Beispiele

Cron-ExpressionBedeutungAnwendungsfall
* * * * *Jede MinuteHeartbeat, Health-Check
*/5 * * * *Alle 5 MinutenPolling externer APIs
15 * * * *Stündlich um :15Cache-Invalidierung
30 2 * * *Täglich um 02:30Nightly Backup
0 9 * * 1-5Werktags 09:00 UhrDaily-Standup-Reminder
0 0 * * 0Sonntag MitternachtWöchentlicher Report
0 0 1 * *Erster Tag im Monat 00:00Rechnungslauf
0 23 * * 5Jeden Freitag 23:00Wochenend-Deploy-Sperre
*/15 9-17 * * 1-5Alle 15 Min, 9–17 Uhr, Mo–FrGeschäftszeiten-Sync
0 */6 * * *Alle 6 StundenIndex-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.sh

Stolperfallen

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.