Cronjob
Ein Cronjob ist eine zeitgesteuerte Aufgabe in Unix- und Linux-Systemen, die automatisch zu festgelegten Zeitpunkten ausgeführt wird. Der Name leitet sich vom griechischen Wort Chronos (Zeit) ab. Cronjobs sind ein fundamentales Werkzeug für die Systemadministration und ermöglicht es, wiederkehrende Aufgaben wie Backups, Systemupdates oder Wartungsskripte ohne manuellen Eingriff auszuführen.
Das System basiert auf zwei Komponenten: dem Cron-Daemon (crond), der als Hintergrunddienst läuft, und der Crontab (Cron Table), einer Konfigurationsdatei mit den geplanten Aufgaben. Der Daemon prüft regelmäßig die Crontab-Dateien und führt fällige Befehle automatisch aus.
Funktionsweise von Cronjobs
Der Cron-Daemon ist ein Hintergrunddienst, der beim Systemstart automatisch gestartet wird. Er arbeitet nach einem einfachen, aber effektiven Prinzip: In regelmäßigen Abständen (typischerweise jede Minute) liest er die Crontab-Dateien, vergleicht die aktuelle Systemzeit mit den konfigurierten Ausführungszeiten und startet passende Befehle.
Jeder Benutzer kann eine eigene Crontab-Datei verwalten. Systemweite Cronjobs werden von Administratoren in /etc/crontab oder im Verzeichnis /etc/cron.d/ konfiguriert. Die Ausführung erfolgt mit den Rechten des jeweiligen Benutzers, was ein wichtiges Sicherheitsmerkmal darstellt.
Crontab-Syntax
Die Syntax einer Crontab-Zeile besteht aus fünf Zeitfeldern, gefolgt vom auszuführenden Befehl. Jedes Feld definiert einen Aspekt des Ausführungszeitpunkts. Das Verständnis dieser Syntax ist essentiell für jeden, der mit Linux-Servern arbeitet.
# Aufbau einer Crontab-Zeile:
# Minute Stunde Tag Monat Wochentag Befehl
# * * * * * /pfad/zum/skript.sh
# Wertebereich:
# Minute: 0-59
# Stunde: 0-23
# Tag: 1-31
# Monat: 1-12
# Wochentag: 0-7 (0 und 7 = Sonntag)
Die Zeitfelder unterstützen verschiedene Angaben: Einzelwerte (5), Bereiche (1-5), Listen (1,3,5), Intervalle (*/15 für alle 15 Einheiten) und das Sternchen (*) als Platzhalter für jeden möglichen Wert.
Praktische Beispiele
Die folgenden Beispiele zeigen typische Anwendungsfälle für Cronjobs. Du kannst sie als Vorlage für deine eigenen zeitgesteuerten Aufgaben verwenden.
# Jeden Tag um 3:00 Uhr nachts ein Backup erstellen
0 3 * * * /home/admin/backup.sh
# Alle 15 Minuten die Systemlast protokollieren
*/15 * * * * /usr/local/bin/log-load.sh
# Jeden Montag um 9:00 Uhr einen Bericht versenden
0 9 * * 1 /opt/scripts/weekly-report.sh
# Am 1. jedes Monats um Mitternacht Logs rotieren
0 0 1 * * /usr/sbin/logrotate /etc/logrotate.conf
# Werktags (Mo-Fr) von 8-18 Uhr stündlich prüfen
0 8-18 * * 1-5 /opt/monitoring/check-services.sh
Crontab verwalten
Die Verwaltung von Cronjobs erfolgt über das crontab-Kommando. Mit wenigen Befehlen kannst du deine zeitgesteuerten Aufgaben anlegen, bearbeiten und überprüfen.
# Eigene Crontab bearbeiten
crontab -e
# Aktuelle Crontab anzeigen
crontab -l
# Alle Cronjobs löschen (Vorsicht!)
crontab -r
# Crontab eines anderen Benutzers bearbeiten (als root)
crontab -u benutzername -e
# Cron-Daemon-Status prüfen
systemctl status cron
Spezielle Zeitangaben
Neben der klassischen Fünf-Felder-Syntax bietet Cron praktische Abkürzungen für häufig verwendete Zeitpunkte. Diese machen die Konfiguration lesbarer und reduzieren Fehlerquellen.
| Kurzform | Bedeutung | Entspricht |
|---|---|---|
@reboot |
Einmal beim Systemstart | - |
@yearly |
Einmal pro Jahr | 0 0 1 1 * |
@monthly |
Einmal pro Monat | 0 0 1 * * |
@weekly |
Einmal pro Woche | 0 0 * * 0 |
@daily |
Einmal pro Tag | 0 0 * * * |
@hourly |
Einmal pro Stunde | 0 * * * * |
Besonders nützlich ist @reboot: Damit kannst du Dienste oder Skripte automatisch nach einem Neustart ausführen, ohne sie als Systemdienst registrieren zu müssen.
Ausgabe und Fehlerbehandlung
Standardmäßig sendet Cron die Ausgabe eines Jobs per E-Mail an den Benutzer. In der Praxis ist es oft sinnvoller, die Ausgabe in eine Logdatei umzuleiten. So behältst du die Kontrolle und kannst Probleme besser nachvollziehen.
# Ausgabe in Logdatei umleiten (stdout und stderr)
0 3 * * * /home/admin/backup.sh >> /var/log/backup.log 2>&1
# Nur Fehler protokollieren
0 3 * * * /home/admin/backup.sh > /dev/null 2>> /var/log/backup-errors.log
# Alle Ausgaben unterdrücken
0 3 * * * /home/admin/backup.sh > /dev/null 2>&1
Die Umleitung 2>&1 sorgt dafür, dass auch Fehlermeldungen (stderr) in die gleiche Datei wie die normale Ausgabe (stdout) geschrieben werden. Das ist wichtig, um bei Problemen alle relevanten Informationen zu haben.
Häufige Anwendungsfälle
Cronjobs sind vielseitig einsetzbar und gehören zum Standardrepertoire der Serveradministration. Die wichtigsten Einsatzgebiete umfassen automatisierte Backups, Systemwartung und Monitoring.
- Backups: Automatische Sicherung von Datenbanken, Konfigurationsdateien und Benutzerdaten
- Log-Rotation: Regelmäßiges Archivieren und Löschen alter Logdateien
- Systemupdates: Automatisches Einspielen von Sicherheitsupdates
- Monitoring: Periodische Prüfung von Diensten, Festplattenplatz und Systemressourcen
- Berichte: Automatischer Versand von täglichen oder wöchentlichen Statusberichten
- Datensynchronisation: Regelmäßiger Abgleich zwischen Systemen oder mit Cloud-Speichern
- Cache-Bereinigung: Löschen temporärer Dateien zur Speicherplatzfreigabe
Tipps und Best Practices
Bei der Arbeit mit Cronjobs gibt es einige Fallstricke, die du kennen solltest. Mit diesen Tipps vermeidest du typische Probleme und sorgst für zuverlässige Ausführung.
- Absolute Pfade verwenden: Cronjobs laufen in einer minimalen Umgebung. Gib daher immer den vollständigen Pfad zu Skripten und Programmen an.
- Umgebungsvariablen setzen: Die PATH-Variable ist eingeschränkt. Definiere benötigte Variablen am Anfang der Crontab.
- Ausführungsrechte prüfen: Stelle sicher, dass Skripte ausführbar sind (
chmod +x skript.sh). - Zeitzone beachten: Cron verwendet die Systemzeit. Bei Servern in anderen Zeitzonen kann das zu Verwirrung führen.
- Überschneidungen vermeiden: Wenn ein Job länger dauert als das Intervall, kann es zu parallelen Ausführungen kommen. Nutze Lock-Dateien oder Tools wie
flock. - Testen vor Produktiveinsatz: Führe neue Cronjobs zuerst manuell aus, um Fehler frühzeitig zu erkennen.
Cronjobs in der IT-Praxis
Als Fachinformatiker für Systemintegration gehören Cronjobs zu deinem täglichen Werkzeugkasten. Du wirst sie einsetzen, um Server zu warten, Backups zu automatisieren und Monitoring-Aufgaben zu planen. Auch in der Anwendungsentwicklung begegnest du ihnen regelmäßig, etwa für das Ausführen von Wartungsaufgaben in Webanwendungen oder das Verarbeiten von Daten im Hintergrund.
In modernen Infrastrukturen werden Cronjobs teilweise durch spezialisierte Scheduler wie Kubernetes CronJobs oder Job-Scheduling-Dienste in Cloud-Plattformen ersetzt. Das grundlegende Konzept und die Syntax bleiben jedoch gleich, weshalb das Verständnis klassischer Cronjobs eine wichtige Grundlage bildet.
Quellen und weiterführende Links
- crontab(5) - Linux Man Page - Offizielle Dokumentation der Crontab-Syntax
- Crontab Guru - Interaktiver Editor zum Testen von Cron-Ausdrücken
- Cron - Wikipedia - Geschichte und Hintergrund des Cron-Systems
- Kubernetes CronJobs - Cronjobs in Container-Umgebungen