Zum Hauptinhalt springen
Zurück zur Kategorie

Cron-Job-Verwaltung: Geplante Aufgaben erstellen

Geplante Aufgaben unter Linux mit crontab erstellen und verwalten: Cron-Ausdrucks-Syntax, praktische Beispiele, Protokollierung und häufige Fehler vermeiden.

Lesezeit: 10 min Serververwaltung
croncronjobcrontabgeplante aufgabenlinuxautomatisierungserver

Inhaltsverzeichnis

Cron-Job-Verwaltung: Geplante Aufgaben erstellen

Cron ist ein zeitbasierter Job-Scheduler unter Linux, der Befehle und Skripte automatisch zu bestimmten Zeiten oder Intervallen ausführt. Er ist unverzichtbar für die Automatisierung wiederkehrender Aufgaben wie Backups, Log-Bereinigung und Update-Prüfungen.

Der Cron-Dienst ist auf den meisten Linux-Distributionen standardmäßig installiert und läuft. Prüfen Sie den Status mit systemctl status cron oder systemctl status crond.

Crontab-Syntax

Jeder Cron-Job besteht aus fünf Zeitfeldern und dem auszuführenden Befehl:

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

Sonderzeichen

ZeichenBedeutungBeispiel
*Jeder Wert* * * * * = jede Minute
,Mehrere Werte1,15 * * * * = Minute 1 und 15
-Bereich1-5 * * * * = Minuten 1 bis 5
/Schritt*/5 * * * * = alle 5 Minuten

Praktische Cron-Ausdrucks-Beispiele

hljs bash
# Jede Minute ausführen
* * * * * /usr/bin/script.sh

# Jede Stunde zur vollen Stunde
0 * * * * /usr/bin/script.sh

# Täglich um 02:30 Uhr
30 2 * * * /usr/bin/backup.sh

# Jeden Montag um 08:00 Uhr
0 8 * * 1 /usr/bin/weekly-report.sh

# Am 1. jeden Monats um Mitternacht
0 0 1 * * /usr/bin/monthly-cleanup.sh

# Alle 5 Minuten
*/5 * * * * /usr/bin/check-service.sh

# Werktags (Mo-Fr) um 09:00 Uhr
0 9 * * 1-5 /usr/bin/workday-task.sh

# Alle 6 Stunden
0 */6 * * * /usr/bin/sync.sh

Spezielle Kürzel

hljs bash
@reboot    # Einmal beim Systemstart
@yearly    # Einmal im Jahr (0 0 1 1 *)
@monthly   # Einmal im Monat (0 0 1 * *)
@weekly    # Einmal pro Woche (0 0 * * 0)
@daily     # Einmal täglich (0 0 * * *)
@hourly    # Einmal pro Stunde (0 * * * *)

Verwendung von crontab

Crontab bearbeiten

hljs bash
# Crontab des aktuellen Benutzers bearbeiten
crontab -e

# Crontab eines bestimmten Benutzers bearbeiten (root erforderlich)
crontab -u benutzername -e

# Aktuelle Crontab auflisten
crontab -l

# Crontab löschen (mit Vorsicht verwenden!)
crontab -r

Der Befehl crontab -r löscht alle Ihre Cron-Jobs und kann nicht rückgängig gemacht werden. Sichern Sie zuerst mit crontab -l > crontab_backup.txt.

Crontab zum ersten Mal bearbeiten

hljs bash
# crontab -e ausführen
crontab -e

# Wenn nach einem Editor gefragt wird, wählen Sie nano (Option 1)
# Fügen Sie Ihren Job am Ende der Datei hinzu:
30 2 * * * /home/benutzer/backup.sh

# Speichern und beenden: Strg+X, J, Enter (für nano)

Systemweite Cron-Dateien

Systemweite Cron-Jobs verwenden die /etc/cron*-Verzeichnisse:

hljs bash
# Verzeichnisstruktur
/etc/crontab          # Haupt-System-Crontab-Datei
/etc/cron.d/          # Anwendungs-Cron-Dateien
/etc/cron.hourly/     # Stündlich ausgeführte Skripte
/etc/cron.daily/      # Täglich ausgeführte Skripte
/etc/cron.weekly/     # Wöchentlich ausgeführte Skripte
/etc/cron.monthly/    # Monatlich ausgeführte Skripte

Cron-Protokollierung

Log-Dateien überwachen

hljs bash
# Cron-Logs auf Debian/Ubuntu
sudo tail -f /var/log/syslog | grep CRON

# Auf RHEL/CentOS
sudo tail -f /var/log/cron

# Mit journald
sudo journalctl -u cron -f

Ausgabe in Datei umleiten

hljs bash
# Stdout und Stderr in Datei umleiten
30 2 * * * /usr/bin/backup.sh >> /var/log/backup.log 2>&1

# Nur Fehler protokollieren
30 2 * * * /usr/bin/backup.sh 2>> /var/log/backup-errors.log

# Alle Ausgaben unterdrücken
30 2 * * * /usr/bin/backup.sh > /dev/null 2>&1

Konfigurieren Sie logrotate, um Log-Dateien zu rotieren, damit sie nicht unbegrenzt wachsen.

Häufige Fehler und Lösungen

1. Umgebungsvariablen-Probleme

Cron erbt nicht die Umgebungsvariablen der Benutzer-Shell. Definieren Sie PATH und andere Variablen explizit:

hljs bash
# Am Anfang der Crontab hinzufügen
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SHELL=/bin/bash

# Oder vollständige Pfade in Befehlen verwenden
30 2 * * * /usr/bin/python3 /home/benutzer/script.py

2. Skript-Ausführungsberechtigung

hljs bash
# Ausführungsberechtigung für das Skript erteilen
chmod +x /home/benutzer/backup.sh

# Berechtigungen prüfen
ls -la /home/benutzer/backup.sh

3. Arbeitsverzeichnis-Probleme

hljs bash
# Arbeitsverzeichnis im Cron-Job explizit angeben
30 2 * * * cd /var/www/html && php artisan schedule:run

Fazit

Cron ist eines der grundlegenden Werkzeuge in der Linux-Systemadministration. Mit korrekter Syntax, Umgebungsvariablen-Verwaltung und Protokollierung können Sie zuverlässige Automatisierung aufbauen. Überprüfen Sie Ihre Jobs regelmäßig mit crontab -l und überwachen Sie Log-Dateien, um Probleme frühzeitig zu erkennen.