Was ist Cron?

Artikel

Cron ist ein zeitbasierter Job-Scheduler, der in Unix- und Linux-Betriebssystemen integriert ist. Er ermöglicht die automatische Ausführung von Befehlen oder Skripten zu festen Zeiten, Daten oder Intervallen — ohne manuellen Eingriff. Der Name stammt vom griechischen Wort chronos (Zeit). Cron ist das Standardwerkzeug zur Automatisierung wiederkehrender Systemaufgaben wie Backups, Log-Rotation, Berichterstellung und das Versenden von E-Mails.

Möchten Sie einen Cron-Ausdruck erstellen oder validieren?

Cron Builder öffnen →

Geschichte

Das ursprüngliche Cron wurde von Ken Thompson bei Bell Labs als Teil von Version 7 Unix um 1979 geschrieben. Es war ein einfacher Daemon, der jede Minute aufwachte, eine Jobtabelle prüfte und alle geplanten Jobs ausführte. Vixie Cron, von Paul Vixie in den Jahren 1987–1988 geschrieben, ersetzte es als Standardimplementierung auf den meisten Unix-Systemen und führte die bekannte Fünf-Felder-Syntax ein, die noch heute verwendet wird. Vixie Cron (oder seine Nachkommen) ist das Standard-Cron auf den meisten Linux-Distributionen. Moderne Varianten umfassen Anacron (für Systeme, die nicht durchgehend laufen), Fcron und systemd-Timer als Alternative auf systemd-basierten Systemen.

Wie Cron funktioniert

Der Cron-Daemon (crond) läuft kontinuierlich im Hintergrund. Jede Minute liest er die Crontab-Dateien (eine pro Benutzer, plus systemweite Crontabs in /etc/cron.d/) und führt alle Jobs aus, deren geplante Zeit mit der aktuellen Zeit übereinstimmt. Jeder Benutzer verwaltet seine eigene Crontab mit dem Befehl crontab.

Cron-Ausdruck-Syntax

Ein Cron-Ausdruck besteht aus fünf durch Leerzeichen getrennten Feldern, gefolgt vom auszuführenden Befehl:

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

Feldwerte

Häufige Beispiele

# Jede Minute
* * * * * /path/to/script.sh

# Jeden Tag um Mitternacht
0 0 * * * /path/to/backup.sh

# Jeden Tag um 3:30 Uhr
30 3 * * * /path/to/task.sh

# Jeden Montag um 9:00 Uhr
0 9 * * 1 /path/to/weekly-report.sh

# Alle 5 Minuten
*/5 * * * * /path/to/check.sh

# Jede Stunde (zur Minute 0)
0 * * * * /path/to/hourly.sh

# Ersten Tag jeden Monats um Mitternacht
0 0 1 * * /path/to/monthly.sh

# Jeden Werktag (Mo–Fr) um 8:00 Uhr
0 8 * * 1-5 /path/to/workday.sh

# Alle 15 Minuten zwischen 9 und 17 Uhr an Werktagen
*/15 9-17 * * 1-5 /path/to/poll.sh

# Zweimal täglich (Mitternacht und Mittag)
0 0,12 * * * /path/to/twice-daily.sh

Standard- vs. Quartz-Cron-Format

Je nach Plattform werden Ihnen zwei verbreitete Cron-Formate begegnen:

Standard (Unix/Linux) Cron — 5 Felder

Das klassische Format, das von crontab unter Unix/Linux verwendet wird. Die kleinste Einheit ist eine Minute.

# Minute Stunde Tag-des-Monats Monat Wochentag
  *       *    *                *     *

Quartz Cron — 6 oder 7 Felder

Verwendet vom Quartz Scheduler (Java), Spring @Scheduled, AWS EventBridge und vielen CI/CD-Tools. Am Anfang wird ein zusätzliches Sekundenfeld hinzugefügt, und am Ende kann optional ein Jahresfeld angehängt werden.

# Sekunde Minute Stunde Tag-des-Monats Monat Wochentag [Jahr]
  0       30     9      *               *     ?

Quartz führt außerdem zusätzliche Sonderzeichen ein, die im Standard-Cron nicht verfügbar sind:

Direkter Vergleich

# Standard-Cron — jeden Tag um 09:30
30 9 * * *

# Quartz-Cron — jeden Tag um 09:30:00
0 30 9 * * ?

# Standard-Cron — jeden Montag um 08:00
0 8 * * 1

# Quartz-Cron — jeden Montag um 08:00:00
0 0 8 ? * MON

# Standard-Cron — alle 5 Minuten
*/5 * * * *

# Quartz-Cron — alle 5 Minuten
0 */5 * * * ?

# Nur Quartz — letzter Tag jedes Monats um Mitternacht
0 0 0 L * ?

# Nur Quartz — erster Montag jedes Monats um 09:00
0 0 9 ? * 2#1

Welches Format verwenden?

Sonderzeichenketten

Die meisten Cron-Implementierungen unterstützen Kurzschreibweisen als Alternative zur Fünf-Felder-Syntax:

Crontab-Befehle

# Crontab im Standard-Editor bearbeiten
crontab -e

# Aktuelle Crontab auflisten
crontab -l

# Crontab vollständig entfernen
crontab -r

# Crontab eines anderen Benutzers bearbeiten (nur root)
crontab -u username -e

Anwendungsfälle

Wichtige Regeln

Häufig gestellte Fragen

Was ist Cron?

Cron ist ein zeitbasierter Job-Scheduler in Unix- und Linux-Betriebssystemen. Er ermöglicht es Benutzern, Befehle oder Skripte so zu planen, dass sie automatisch zu bestimmten Zeiten, Daten oder Intervallen ausgeführt werden. Der Name stammt vom griechischen Wort chronos, das Zeit bedeutet.

Was ist ein Cron-Job?

Ein Cron-Job ist eine Aufgabe, die so geplant ist, dass sie mit dem Cron-Daemon automatisch zu einer definierten Zeit oder in einem definierten Intervall ausgeführt wird. Jeder Cron-Job ist eine Zeile in einer Crontab-Datei, bestehend aus einem Cron-Ausdruck (5 Zeitfelder) gefolgt vom auszuführenden Befehl.

Was ist ein Cron-Ausdruck?

Ein Cron-Ausdruck ist eine Zeichenkette aus fünf durch Leerzeichen getrennten Feldern, die einen Zeitplan definieren: Minute (0–59), Stunde (0–23), Tag des Monats (1–31), Monat (1–12) und Wochentag (0–7). Jedes Feld akzeptiert spezifische Werte, Bereiche (1-5), Schrittweiten (*/5) und Platzhalter (*).

Was bedeutet * in einem Cron-Ausdruck?

Ein Sternchen (*) bedeutet "jeden" — es stimmt mit jedem gültigen Wert für dieses Feld überein. * * * * * läuft jede Minute. 0 * * * * läuft zur Minute 0 jeder Stunde (d. h. jede volle Stunde).

Was ist der Unterschied zwischen Cron und Crontab?

Cron ist der Daemon (Hintergrunddienst), der Zeitpläne liest und Jobs ausführt. Crontab (Cron-Tabelle) ist die Konfigurationsdatei, die die Liste der geplanten Jobs speichert. Sie bearbeiten Ihre Crontab mit crontab -e, und der Cron-Daemon liest sie, um zu wissen, wann jeder Job ausgeführt werden soll.

Wie führe ich einen Cron-Job alle 5 Minuten aus?

Verwenden Sie die Schritt-Syntax: */5 * * * * /pfad/zum/befehl. Das */5 bedeutet "zur Minute 0, 5, 10, 15 … 55". Ebenso bedeutet */10 alle 10 Minuten und */15 alle 15 Minuten.

Verwandte Artikel

Quellen