Cron ist der Aufgabenplaner von Linux. Ob Backups, Updates oder eigene Skripte - mit Cron führen Sie Aufgaben automatisch zu festgelegten Zeiten aus.
Was ist Cron?
Cron ist ein Daemon (Hintergrunddienst), der Jobs nach einem Zeitplan ausführt. Die Jobs werden in der "Crontab" (Cron Table) definiert.
Crontab bearbeiten
Eigene Crontab öffnen
crontab -eBeim ersten Aufruf wählen Sie einen Editor (nano empfohlen für Einsteiger).
Crontab anzeigen
crontab -lCrontab löschen
crontab -rCrontab eines anderen Benutzers
crontab -u www-data -e # Bearbeiten
crontab -u www-data -l # AnzeigenCron-Syntax
Jede Zeile in der Crontab folgt diesem Format:
* * * * * Befehl
│ │ │ │ │
│ │ │ │ └── Wochentag (0-7, 0 und 7 = Sonntag)
│ │ │ └──── Monat (1-12)
│ │ └────── Tag (1-31)
│ └──────── Stunde (0-23)
└────────── Minute (0-59)Sonderzeichen
*- Jeder Wert,- Liste von Werten (1,3,5)-- Bereich (1-5)/- Schritte (*/15 = alle 15)
Praktische Beispiele
Jede Minute
* * * * * /pfad/zum/skript.shTäglich um 3:00 Uhr
0 3 * * * /pfad/zum/backup.shJeden Montag um 9:00 Uhr
0 9 * * 1 /pfad/zum/report.shAlle 15 Minuten
*/15 * * * * /pfad/zum/check.shAm 1. jeden Monats um 4:00 Uhr
0 4 1 * * /pfad/zum/monatsbackup.shWerktags um 8:00 Uhr
0 8 * * 1-5 /pfad/zum/skript.shMehrmals täglich
0 8,12,18 * * * /pfad/zum/skript.shSpezielle Zeitangaben
Statt der 5-Felder-Syntax können Sie Schlüsselwörter verwenden:
@reboot /pfad/zum/startup.sh # Bei Systemstart
@yearly /pfad/zum/skript.sh # Jährlich (1.1. 0:00)
@monthly /pfad/zum/skript.sh # Monatlich (1. 0:00)
@weekly /pfad/zum/skript.sh # Wöchentlich (So 0:00)
@daily /pfad/zum/skript.sh # Täglich (0:00)
@hourly /pfad/zum/skript.sh # StündlichOutput und Logging
Output per E-Mail
Standardmäßig sendet Cron die Ausgabe per E-Mail. Definieren Sie den Empfänger:
MAILTO=admin@example.com
0 3 * * * /pfad/zum/backup.shOutput unterdrücken
0 3 * * * /pfad/zum/skript.sh > /dev/null 2>&1Output in Datei loggen
0 3 * * * /pfad/zum/skript.sh >> /var/log/mein-skript.log 2>&1Mit Timestamp loggen
0 3 * * * /pfad/zum/skript.sh >> /var/log/mein-skript.log 2>&1 && echo "[$(date)] Job ausgeführt" >> /var/log/mein-skript.logUmgebungsvariablen
Cron läuft mit eingeschränkter Umgebung. Pfade und Variablen müssen explizit gesetzt werden:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
0 3 * * * /pfad/zum/backup.shSystem-Cron-Verzeichnisse
Neben der Benutzer-Crontab gibt es System-Verzeichnisse:
/etc/cron.d/- Crontab-Dateien für Pakete/etc/cron.hourly/- Skripte stündlich ausführen/etc/cron.daily/- Skripte täglich ausführen/etc/cron.weekly/- Skripte wöchentlich ausführen/etc/cron.monthly/- Skripte monatlich ausführen
Beispiel: Tägliches Skript
nano /etc/cron.daily/mein-backupInhalt:
#!/bin/bash
/pfad/zum/backup.shAusführbar machen:
chmod +x /etc/cron.daily/mein-backupPraxisbeispiele
Tägliches Datenbank-Backup
0 2 * * * mysqldump -u backup -p'passwort' --all-databases | gzip > /backup/db-$(date +\%Y\%m\%d).sql.gzWichtig: % muss als \% escaped werden in der Crontab!
Alte Logs löschen
0 4 * * * find /var/log -name "*.log" -mtime +30 -deleteLet's Encrypt erneuern
0 3 * * 1 certbot renew --quietSystem-Updates (vorsichtig!)
0 4 * * 0 apt update && apt upgrade -y >> /var/log/apt-upgrade.log 2>&1Festplattenplatz prüfen
0 */4 * * * df -h | mail -s "Festplattenplatz $(hostname)" admin@example.comCron testen
Skript manuell ausführen
Testen Sie Ihr Skript erst manuell:
/pfad/zum/skript.shCron-Umgebung simulieren
env -i /bin/bash --noprofile --norc -c '/pfad/zum/skript.sh'Häufig testen, dann reduzieren
# Zum Testen: jede Minute
* * * * * /pfad/zum/skript.sh >> /tmp/cron-test.log 2>&1
# Nach erfolgreichem Test: richtige Zeit
0 3 * * * /pfad/zum/skript.shCron-Logs prüfen
# Debian/Ubuntu
grep CRON /var/log/syslog
# Live verfolgen
tail -f /var/log/syslog | grep CRONHäufige Fehler
Skript wird nicht ausgeführt
1. Rechte prüfen: chmod +x /pfad/zum/skript.sh 2. Pfad vollständig: Immer absolute Pfade verwenden 3. Shebang vorhanden: #!/bin/bash am Anfang 4. Cron-Syntax prüfen: Online-Tools wie crontab.guru
Skript läuft manuell, aber nicht per Cron
- PATH-Variable setzen
- Absolute Pfade verwenden
- Umgebungsvariablen explizit definieren
Timing-Probleme
- Serverzeit prüfen:
date - Timezone prüfen:
timedatectl - Cron läuft in UTC? Prüfen Sie die System-Timezone
Online-Tools
- Crontab.guru - Cron-Syntax erklären und generieren
- Cronitor - Cron-Job-Monitoring
Fazit
Cron ist unverzichtbar für Server-Administration. Die Syntax ist anfangs gewöhnungsbedürftig, aber mit crontab.guru schnell gemeistert. Wichtig: Immer mit Logging testen, absolute Pfade verwenden, und die Cron-Umgebung beachten.