Cron Expression Generator & Erklärer – Cron-Ausdrücke verstehen, testen & erstellen

← Alle Mini-Tools
Entwickler-Tool · Kostenlos · Im Browser

Cron Expression Erklärer

Cron-Ausdrücke sofort verstehen, auf Deutsch erklären lassen, nächste Ausführungszeiten berechnen und eigene Cron-Jobs visuell erstellen – alles ohne Registrierung.

✅ Kostenlos 🕐 Nächste 10 Ausführungen 🔨 Visueller Builder 📚 30+ Vorlagen
🔍
Cron-Ausdruck eingeben & erklären
Minute
0–59
Stunde
0–23
Tag (Monat)
1–31
Monat
1–12
Wochentag
0–7

Was sind Cron-Jobs? Eine vollständige Einführung

Wer in der Webentwicklung, Systemadministration oder DevOps arbeitet, begegnet ihnen täglich: Cron-Jobs. Aber was steckt eigentlich dahinter, und warum ist das Verständnis von Cron-Ausdrücken so wichtig?

Ein Cron-Job ist eine zeitgesteuerte Aufgabe auf Unix-artigen Betriebssystemen (Linux, macOS). Der Name kommt vom griechischen Wort Chronos (Zeit). Der Cron-Daemon – ein Hintergrundprozess – überprüft minütlich, ob ein geplanter Job ausgeführt werden soll, und startet ihn dann automatisch.

Cron-Jobs sind unverzichtbar für Aufgaben wie:

  • Automatische Datenbank-Backups jede Nacht
  • Versand von Newsletter-E-Mails zu festgelegten Zeiten
  • Log-Dateien rotieren und alte Logs löschen
  • Cache leeren bei Content-Management-Systemen wie WordPress
  • API-Daten synchronisieren in regelmäßigen Intervallen
  • Monitoring-Skripte ausführen und Alerts versenden
  • Statistische Reports generieren und per E-Mail versenden

Das zentrale Element jedes Cron-Jobs ist der Cron-Ausdruck – ein kompakter String aus fünf Feldern, der exakt definiert, wann ein Job laufen soll. Mit unserem Tool kannst du jeden Cron-Ausdruck sofort verstehen und eigene Ausdrücke visuell erstellen.

Die Cron-Syntax Schritt für Schritt erklärt

Ein Standard-Cron-Ausdruck besteht aus fünf Feldern, die durch Leerzeichen getrennt sind:

┌─────────── Minute (0-59)
│ ┌───────── Stunde (0-23)
│ │ ┌─────── Tag des Monats (1-31)
│ │ │ ┌───── Monat (1-12)
│ │ │ │ ┌─── Wochentag (0-7, 0 und 7 = Sonntag)
│ │ │ │ │
* * * * *

Ein einfaches Beispiel: 30 7 * * 1-5 bedeutet „Um 7:30 Uhr, jeden Wochentag (Montag bis Freitag)". Unser Tool zeigt dir für jeden Ausdruck genau diese Erklärung – plus die nächsten zehn Ausführungszeiten, damit du direkt überprüfen kannst, ob der Ausdruck das tut, was du erwartest.

Das Minuten-Feld

Das erste Feld definiert die Minute (0–59), in der der Job starten soll. 0 bedeutet zur vollen Stunde, 30 bedeutet zur halben Stunde. Mit */15 läuft der Job alle 15 Minuten: zur Minute 0, 15, 30 und 45 jeder Stunde.

Das Stunden-Feld

Das zweite Feld definiert die Stunde (0–23). 0 ist Mitternacht, 12 ist Mittag. Wichtig: Cron verwendet das 24-Stunden-Format. 0 14 * * * läuft also um 14:00 Uhr, nicht um 2 Uhr.

Tag-des-Monats und Monat

Das dritte Feld (1–31) und vierte Feld (1–12) definieren gemeinsam, an welchem Datum ein Job läuft. 0 0 1 1 * läuft am 1. Januar um Mitternacht – der klassische Jahreswechsel-Job.

Das Wochentag-Feld

Das fünfte Feld (0–7) definiert den Wochentag: 0 und 7 sind beide Sonntag, 1 ist Montag, 5 ist Freitag. 1-5 bedeutet Montag bis Freitag – der häufigste Wert für Business-Anwendungen.

⚠️ Wichtig: Wenn sowohl Tag-des-Monats als auch Wochentag angegeben sind (beide nicht *), führt Cron den Job aus, wenn einer der beiden Bedingungen erfüllt ist – nicht beide gleichzeitig. Das ist eine häufige Fehlerquelle!

Sonderzeichen in Cron-Ausdrücken

Die eigentliche Stärke von Cron liegt in seinen Sonderzeichen, die flexible Zeitpläne ermöglichen:

Der Stern (*) – Wildcard

Der Stern bedeutet „jeder gültige Wert". * * * * * läuft jede Minute. Im Stunden-Feld bedeutet * „jede Stunde". Es ist das häufigste Zeichen in Cron-Ausdrücken.

Das Komma (,) – Aufzählung

Mehrere Werte werden mit Komma aufgelistet. 0 8,12,18 * * * läuft um 8:00, 12:00 und 18:00 Uhr. 0 0 * * 1,3,5 läuft um Mitternacht an Montagen, Mittwoch und Freitag. Wenn du öfter mit Zeitreihen arbeitest, ist auch unser Unix Timestamp Konverter hilfreich.

Der Bindestrich (-) – Bereich

Bereiche werden mit Bindestrich definiert. 1-5 im Wochentag-Feld bedeutet Montag bis Freitag. 8-17 im Stunden-Feld bedeutet von 8 bis 17 Uhr.

Der Schrägstrich (/) – Schritt/Intervall

Der Schrägstrich definiert Intervalle. */5 bedeutet „alle 5 Schritte". Im Minuten-Feld bedeutet */5 alle 5 Minuten. Im Stunden-Feld bedeutet */2 alle 2 Stunden. Mit 10/5 startet man bei Minute 10 und läuft dann alle 5 Minuten: 10, 15, 20, 25…

L – Letzter Tag

In manchen Cron-Implementierungen (Quartz, Spring) steht L im Tag-Feld für den letzten Tag des Monats. 0 0 L * * läuft also am letzten Tag jedes Monats. Das ist nützlich für Monatsabschluss-Jobs.

@-Kürzel

Linux-Cron unterstützt praktische Kürzel: @daily entspricht 0 0 * * *, @hourly entspricht 0 * * * *, und @reboot läuft einmalig beim Systemstart. Diese Kürzel sind leichter zu lesen und weniger fehleranfällig.

30 Cron-Ausdrücke für die Praxis

Hier sind die wichtigsten und häufigsten Cron-Ausdrücke für alltägliche Aufgaben:

Häufige Zeitintervalle

  • * * * * * – Jede Minute (für Monitoring, Heartbeats)
  • */5 * * * * – Alle 5 Minuten (API-Polling, Cache-Refresh)
  • */15 * * * * – Alle 15 Minuten (Daten-Synchronisation)
  • */30 * * * * – Alle 30 Minuten (leichte Hintergrundaufgaben)
  • 0 * * * * – Jede volle Stunde (stündliche Reports)
  • 0 */2 * * * – Alle 2 Stunden
  • 0 */6 * * * – Alle 6 Stunden (4x täglich)

Tägliche Jobs

  • 0 0 * * * – Täglich um Mitternacht (Backups, Log-Rotation)
  • 0 6 * * * – Täglich um 6:00 Uhr (Frühmorgens-Jobs)
  • 0 8 * * * – Täglich um 8:00 Uhr (Start des Arbeitstags)
  • 30 23 * * * – Täglich um 23:30 Uhr (Nachtjobs)
  • 0 2 * * * – Täglich um 2:00 Uhr nachts (Datenbank-Wartung)

Wochentag-spezifische Jobs

  • 0 8 * * 1-5 – Werktags um 8:00 Uhr (Business-Aufgaben)
  • 0 9 * * 1 – Jeden Montag um 9:00 (Wochenstart-Reports)
  • 0 17 * * 5 – Jeden Freitag um 17:00 (Wochenabschluss)
  • 0 10 * * 0 – Jeden Sonntag um 10:00 (Wöchentliches Backup)
  • 0 0 * * 0,6 – Jedes Wochenende um Mitternacht

Monatliche und jährliche Jobs

  • 0 0 1 * * – Erster des Monats um Mitternacht (Monatsberichte)
  • 0 0 15 * * – 15. des Monats (Halbmonats-Jobs)
  • 0 0 1,15 * * – 1. und 15. jeden Monats
  • 0 0 L * * – Letzter Tag des Monats
  • 0 0 1 1 * – Jährlich am 1. Januar
  • 0 0 1 */3 * – Quartalsweise (1. Jan, Apr, Jul, Okt)

Komplexere Ausdrücke

  • 0 8-18 * * 1-5 – Stündlich während der Arbeitszeit Mo–Fr
  • 0 0 * * 1 – Wöchentlich montags um Mitternacht
  • 5,35 * * * * – Zur Minute 5 und 35 jeder Stunde
  • 0 9 1-7 * 1 – Ersten Montag des Monats um 9:00
  • */10 9-17 * * 1-5 – Alle 10 Min. während Bürozeiten
  • 0 0 * * 0 – Jeden Sonntag um Mitternacht

Cron auf verschiedenen Plattformen

Cron-Ausdrücke sind nicht überall identisch. Je nach Plattform gibt es Unterschiede in der Syntax und den unterstützten Funktionen:

Linux/Unix Cron (klassisch)

Der klassische Linux-Cron ist das Original. Er verwendet fünf Felder und unterstützt die grundlegenden Sonderzeichen. Konfiguriert wird er über crontab -e. Wichtig: Umgebungsvariablen wie PATH sind anders als in der Shell – gib immer absolute Pfade an.

# crontab -e
# Täglich um 2:00 Uhr ein Backup erstellen
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# Alle 5 Minuten Monitoring ausführen
*/5 * * * * /usr/local/bin/monitor.py

Spring / Quartz Scheduler (Java)

Quartz verwendet sechs Felder – ein zusätzliches Sekunden-Feld am Anfang. 0 30 8 * * MON-FRI läuft werktags um 8:30:00 Uhr. Spring's @Scheduled-Annotation kann beide Formate verwenden. Wenn du API-Daten mit Zeitstempeln verarbeitest, empfehlen wir auch unseren Unix Timestamp Konverter.

// Spring Boot @Scheduled
@Scheduled(cron = "0 0 8 * * MON-FRI")
public void morgenlicheAufgabe() {
    // Läuft werktags um 8:00:00 Uhr
}

GitHub Actions

GitHub Actions unterstützt Cron-Syntax für Workflows. Beachte: GitHub Actions verwendet UTC-Zeit und die minimale Granularität ist 5 Minuten.

on:
  schedule:
    # Täglich um 8:00 UTC
    - cron: '0 8 * * *'
    # Jeden Montag um 9:00 UTC
    - cron: '0 9 * * 1'

AWS CloudWatch Events / EventBridge

AWS verwendet eine eigene Cron-Syntax mit sechs Feldern, wobei das Jahres-Feld am Ende hinzukommt: cron(0 8 ? * MON-FRI *). Außerdem verwendet AWS ? statt * für das Feld, das ignoriert werden soll (entweder Tag oder Wochentag).

Kubernetes CronJob

Kubernetes unterstützt Standard-Cron-Syntax für CronJob-Ressourcen. Die Zeitzone hängt vom Node-Timezone-Setting ab, standardmäßig UTC.

apiVersion: batch/v1
kind: CronJob
metadata:
  name: taegliges-backup
spec:
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            image: backup-image:latest

Node.js / node-cron

In Node.js-Projekten ermöglicht node-cron die Ausführung von JavaScript-Funktionen nach Cron-Schedule. Es unterstützt optionale Sekunden als sechstes Feld.

const cron = require('node-cron');

// Jeden Tag um 9:00 Uhr
cron.schedule('0 9 * * *', () => {
  console.log('Tägliche Aufgabe gestartet');
  sendeDailyReport();
});

// Alle 30 Minuten
cron.schedule('*/30 * * * *', () => {
  syncDatabase();
});

Häufige Fehler bei Cron-Ausdrücken

Cron-Jobs laufen oft still im Hintergrund – Fehler fallen manchmal erst nach Tagen auf. Hier sind die häufigsten Fallstricke:

1. Falsche Zeitzone

Cron läuft in der Systemzeitzone des Servers, die oft UTC ist – nicht in deiner lokalen Zeit. Ein Job, der um 9:00 Uhr morgens laufen soll, muss auf deutschen Servern im Sommer als 0 7 * * * konfiguriert werden (UTC+2). Unser Zeitzonenrechner hilft dir dabei, die richtige UTC-Zeit zu berechnen.

2. Kein absoluter Pfad

In der Crontab ist PATH nicht wie in der interaktiven Shell gesetzt. Ein Skript, das direkt in der Shell funktioniert, kann im Cron scheitern. Lösung: Immer absolute Pfade verwenden, z.B. /usr/bin/python3 statt python3.

3. AND-Logik bei Tag und Wochentag

Viele Entwickler erwarten, dass 0 0 1 * 1 am ersten Montag des Monats läuft. Tatsächlich läuft er am ersten des Monats ODER an jedem Montag. Für „erster Montag" braucht man ein Skript, das die Bedingung selbst prüft.

4. Ausgabe wird nicht geloggt

Ohne explizite Log-Umleitung werden Ausgaben per E-Mail versandt (falls konfiguriert) oder gehen verloren. Füge immer Logging hinzu: command >> /var/log/cron.log 2>&1

5. Minimalintervall vergessen

Cron hat eine Granularität von einer Minute. Für Aufgaben, die häufiger als jede Minute laufen sollen, sind andere Tools wie Systemd-Timers oder dedizierte Job-Queues besser geeignet.

Best Practices für produktive Cron-Jobs

Mit diesen Empfehlungen sind deine Cron-Jobs zuverlässig und wartbar:

Idempotenz sicherstellen

Ein Cron-Job sollte problemlos mehrfach ausgeführt werden können, ohne Schäden anzurichten. Prüfe vor dem Schreiben einer Datei, ob sie schon existiert. Nutze Transaktionen für Datenbankoperationen.

Timeouts setzen

Ein Job, der hängt, kann alle nachfolgenden Ausführungen blockieren. Setze Timeouts mit timeout 300 ./mein-script.sh (300 Sekunden).

Locking implementieren

Verhindere, dass eine neue Job-Instanz startet, bevor die vorherige abgeschlossen ist, mit flock: flock -n /tmp/mein-job.lock ./mein-script.sh

Monitoring einrichten

Nutze Dead Man's Snitch, Healthchecks.io oder Cronitor, um zu überwachen, ob Jobs tatsächlich laufen. Ein fehlgeschlagener Backup-Job, den niemand bemerkt, ist wertlos.

Crontab dokumentieren

Füge in der Crontab für jeden Job einen Kommentar hinzu, der erklärt, was er tut und warum. In 6 Monaten wirst du froh sein:

# Nachtliches Datenbankbackup - erstellt täglich um 2:30 Uhr
# Backup liegt in /var/backups/db/ und wird nach 30 Tagen gelöscht
30 2 * * * /usr/local/bin/backup-db.sh

Alternativen zu Cron

Für komplexere Anforderungen gibt es moderne Alternativen zu Cron:

Systemd-Timer

Modernere Linux-Systeme nutzen Systemd-Timer statt Cron. Sie bieten besseres Logging (via journald), Dependency-Management und monotone Zeitangaben (z.B. „30 Minuten nach dem Booten"). Für neue Linux-Projekte oft die bessere Wahl.

Apache Airflow

Für komplexe Datenpipelines und ETL-Prozesse ist Apache Airflow die beste Wahl. Es bietet visuelle DAG-Definition, Retry-Logik, Monitoring und skaliert auf viele Workflows.

Celery Beat

In Python-Projekten ist Celery Beat die populärste Lösung für verteilte Hintergrundaufgaben mit Scheduling. Ideal wenn du sowieso Celery für Task-Queues nutzt.

Cloud-native Scheduler

AWS EventBridge, Google Cloud Scheduler und Azure Logic Apps bieten Cron-ähnliches Scheduling als Managed Service – ohne eigene Server-Infrastruktur.

Häufige Fragen zu Cron-Ausdrücken

Standard-Unix-Cron verwendet 5 Felder: Minute, Stunde, Tag, Monat, Wochentag. Quartz (Java-Scheduling-Framework) und manche anderen Implementierungen fügen als erstes Feld die Sekunden (0–59) hinzu. Das macht 6 Felder gesamt. AWS EventBridge verwendet sogar 6 Felder mit Jahres-Angabe am Ende. Unser Tool arbeitet mit dem Standard-5-Feld-Format.
Standard-Cron unterstützt keine Sub-Minuten-Intervalle. Für Sekunden-genaue Scheduling-Anforderungen gibt es mehrere Alternativen: Innerhalb des Cron-Skripts kannst du Schleifen mit sleep-Befehlen verwenden. Für ernsthafte Anforderungen sind Systemd-Timer (AccuracySec-Option), spezialisierte Job-Queues (Redis Queue, Celery) oder Event-Driven-Architekturen die richtige Wahl.
Der häufigste Grund ist eine falsche Zeitzone. Cron verwendet die Systemzeitzone des Servers, die auf vielen Cloud-Servern UTC ist. Ein Job, der um 10:00 Uhr in Berlin laufen soll, muss im Sommer als 8:00 UTC (UTC+2) und im Winter als 9:00 UTC (UTC+1) konfiguriert sein. Überprüfe die Systemzeit mit `date` und die Zeitzone mit `timedatectl` oder `cat /etc/timezone`.
Am besten testest du das Skript zuerst manuell in der Shell, um sicherzustellen, dass es funktioniert. Dann führe es mit `cron`-ähnlicher Umgebung aus: `env -i /usr/local/bin/mein-skript.sh`. Unser Cron-Expression-Tool zeigt dir die nächsten Ausführungszeiten – so kannst du überprüfen, ob der Zeitplan deinen Erwartungen entspricht. Außerdem kannst du `run-parts --test /etc/cron.daily` nutzen, um zu simulieren.
Ja, in den meisten Cron-Implementierungen kannst du für Monate die englischen Kürzel verwenden: JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC. Für Wochentage: SUN, MON, TUE, WED, THU, FRI, SAT. Beispiel: `0 0 1 JAN *` statt `0 0 1 1 *`. Das verbessert die Lesbarkeit erheblich.
Standard-Cron hat kein „Catch-up"-Feature. Wenn der Server während einer geplanten Ausführung aus ist, wird der Job schlicht nicht ausgeführt und auch nicht nachgeholt. Für kritische Jobs, die nicht verpasst werden dürfen, bietet Anacron eine Lösung: Es führt verpasste Jobs nach dem nächsten Start nach. Alternativ sind Cloud-Scheduler oder dedizierte Job-Runner wie Nomad besser geeignet.
Noch keine Kommentare