Cronjobs Linux Einrichten Anleitung
Cronjobs unter Linux einrichten
Cronjobs ermöglichen es, Aufgaben automatisch zu bestimmten Zeiten auszuführen - von täglichen Backups über Log-Rotation bis zu regelmäßigen Datenbank-Optimierungen. Diese Anleitung erklärt die Crontab-Syntax und zeigt praktische Beispiele.
Was ist Cron?
Cron ist ein zeitbasierter Job-Scheduler in Unix-ähnlichen Betriebssystemen. Er führt Befehle oder Skripte zu festgelegten Zeiten automatisch aus.
- Cron: Der Daemon (Hintergrunddienst), der Jobs ausführt
- Crontab: Die Tabelle mit den geplanten Aufgaben
- Cronjob: Eine einzelne geplante Aufgabe
Crontab-Befehle
# Eigene Crontab bearbeiten
crontab -e
# Eigene Crontab anzeigen
crontab -l
# Eigene Crontab löschen
crontab -r
# Crontab eines anderen Benutzers bearbeiten (als root)
crontab -u username -e
Die Crontab-Syntax
Jede Zeile in der Crontab folgt diesem Format:
┌───────────── Minute (0 - 59)
│ ┌───────────── Stunde (0 - 23)
│ │ ┌───────────── Tag des Monats (1 - 31)
│ │ │ ┌───────────── Monat (1 - 12)
│ │ │ │ ┌───────────── Wochentag (0 - 7, 0 und 7 = Sonntag)
│ │ │ │ │
│ │ │ │ │
* * * * * Befehl
Sonderzeichen
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
* |
Jeder Wert | * * * * * = jede Minute |
, |
Mehrere Werte | 0,30 * * * * = zur vollen und halben Stunde |
- |
Wertebereich | 0 9-17 * * * = stündlich von 9-17 Uhr |
/ |
Schrittweite | */15 * * * * = alle 15 Minuten |
Praktische Beispiele
Zeitbasierte Jobs
# Jeden Tag um 3:00 Uhr nachts
0 3 * * * /home/user/backup.sh
# Jeden Montag um 6:00 Uhr
0 6 * * 1 /home/user/weekly-report.sh
# Am 1. jeden Monats um Mitternacht
0 0 1 * * /home/user/monthly-cleanup.sh
# Alle 5 Minuten
*/5 * * * * /home/user/check-status.sh
# Alle 2 Stunden
0 */2 * * * /home/user/sync-data.sh
# Werktags um 8:30 Uhr (Mo-Fr)
30 8 * * 1-5 /home/user/workday-task.sh
# Nur im Januar und Juli, täglich um 12:00
0 12 * 1,7 * /home/user/biannual-report.sh
Häufige Anwendungsfälle
# Tägliches Datenbank-Backup um 2:00 Uhr
0 2 * * * mysqldump -u root -p'password' database > /backup/db_$(date +\%Y\%m\%d).sql
# WordPress Cronjobs (alle 15 Minuten)
*/15 * * * * cd /var/www/html && php wp-cron.php > /dev/null 2>&1
# Log-Dateien täglich rotieren
0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf
# SSL-Zertifikat erneuern (2x täglich prüfen)
0 0,12 * * * certbot renew --quiet
# Alte Dateien löschen (älter als 30 Tage)
0 4 * * * find /tmp -type f -mtime +30 -delete
# Server-Status per E-Mail
0 8 * * * /usr/bin/df -h | mail -s "Disk Report" admin@example.com
Vordefinierte Zeitangaben
Viele Cron-Implementierungen unterstützen spezielle Strings:
@reboot # Einmal beim Systemstart
@yearly # Einmal pro Jahr (0 0 1 1 *)
@annually # Wie @yearly
@monthly # Einmal pro Monat (0 0 1 * *)
@weekly # Einmal pro Woche (0 0 * * 0)
@daily # Einmal pro Tag (0 0 * * *)
@midnight # Wie @daily
@hourly # Einmal pro Stunde (0 * * * *)
# Beispiele
@daily /home/user/daily-backup.sh
@reboot /home/user/startup-script.sh
Ausgabe und Logging
Ausgabe in Datei umleiten
# Stdout und Stderr in Datei
0 3 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1
# Nur Stderr in Datei
0 3 * * * /home/user/backup.sh 2>> /var/log/backup-errors.log
# Ausgabe komplett unterdrücken
0 3 * * * /home/user/backup.sh > /dev/null 2>&1
E-Mail-Benachrichtigung
# Am Anfang der Crontab
MAILTO="admin@example.com"
# Für einzelne Jobs deaktivieren
0 3 * * * /home/user/backup.sh > /dev/null 2>&1
Umgebungsvariablen
Cronjobs laufen mit einer eingeschränkten Umgebung:
# Am Anfang der Crontab definieren
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/home/user
# Oder im Skript selbst
#!/bin/bash
source /home/user/.bashrc
export PATH=/usr/local/bin:$PATH
# Dann der eigentliche Befehl
...
💡 Tipp: Verwenden Sie in Cronjobs immer absolute Pfade für Befehle und Dateien!
Cronjobs debuggen
Cron-Log prüfen
# Ubuntu/Debian
grep CRON /var/log/syslog
# CentOS/RHEL
cat /var/log/cron
# Live-Monitoring
tail -f /var/log/syslog | grep CRON
Häufige Probleme
| Problem | Lösung |
|---|---|
| Skript läuft manuell, aber nicht via Cron | PATH-Variable prüfen, absolute Pfade verwenden |
| Keine Ausgabe/Fehler sichtbar | Ausgabe in Log-Datei umleiten |
| Berechtigungsfehler | Skript ausführbar machen: chmod +x script.sh |
| Job läuft zur falschen Zeit | Zeitzone prüfen: timedatectl |
System-Crontabs
Neben Benutzer-Crontabs gibt es systemweite Konfigurationen:
# System-Crontab
/etc/crontab
# Verzeichnisse für periodische Jobs
/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/
# Benutzerdefinierte Crontabs
/etc/cron.d/
Alternativen zu Cron
- systemd Timer: Moderner, mehr Funktionen, besseres Logging
- Anacron: Für Systeme, die nicht 24/7 laufen
- at: Für einmalige, zeitgesteuerte Jobs
Weitere Hilfe
- 🔧 Crontab Guru - Online-Editor für Cron-Ausdrücke
- 📧 E-Mail: support@enjyn.de