Enterprise Hosting · Von Gamern für Gamer
Cronjobs – Aufgaben automatisch planen
Mit Cronjobs automatisierst du wiederkehrende Aufgaben auf deinem Server – von Backups über Updates bis hin zum Löschen alter Logs. Diese Anleitung zeigt dir, wie du Cronjobs einrichtest und verwaltest.
Hinweis: Ausführliche Anleitungen zu Server-Administration findest du in der linken Navigation.
Was ist ein Cronjob?
Ein Cronjob ist eine zeitgesteuerte Aufgabe, die der Cron-Daemon im Hintergrund ausführt. Du legst fest, wann und wie oft ein Befehl oder Skript ausgeführt wird – einmalig oder regelmäßig. Cron läuft auf jedem Linux-Server und ist standardmäßig aktiv.
Cronjob-Syntax verstehen
Ein Cronjob besteht aus fünf Zeitangaben und dem auszuführenden Befehl:
* * * * * /pfad/zum/befehl
│ │ │ │ │
│ │ │ │ └── Wochentag (0-7, 0 und 7 = Sonntag)
│ │ │ └──── Monat (1-12)
│ │ └────── Tag (1-31)
│ └──────── Stunde (0-23)
└────────── Minute (0-59)
Zeitangaben – Beispiele
| Zeitplan | Syntax | Bedeutung |
|---|---|---|
| Jede Minute | * * * * * |
Läuft 1440 Mal am Tag |
| Jede Stunde | 0 * * * * |
Zur vollen Stunde |
| Täglich um 3 Uhr nachts | 0 3 * * * |
Gut für Backups und Wartung |
| Jeden Sonntag um 4 Uhr | 0 4 * * 0 |
Wöchentliche Aufgaben |
| Am 1. jedes Monats | 0 0 1 * * |
Monatliche Berichte |
| Alle 15 Minuten | */15 * * * * |
Häufige Prüfungen |
| Werktags um 9 Uhr | 0 9 * * 1-5 |
Montag bis Freitag |
Cronjobs einrichten
Für den aktuellen Benutzer
# Crontab öffnen
crontab -e
Beim ersten Mal wirst du nach einem Editor gefragt. Wähle nano (einfacher) oder vim (fortgeschritten).
Für root (System-Aufgaben)
sudo crontab -e
Für einen bestimmten Benutzer
sudo crontab -u benutzername -e
Praktische Beispiele
Backup-Automatisierung
# Tägliches Datenbank-Backup um 2:30 Uhr nachts
30 2 * * * mysqldump -u root -p'Passwort' datenbank > /backup/db_$(date +\%Y\%m\%d).sql
# Wöchentliches Server-Backup jeden Sonntag um 4 Uhr
0 4 * * 0 tar -czf /backup/server_$(date +\%Y\%m\%d).tar.gz /var/www
Log-Management
# Logs löschen die älter als 30 Tage sind
0 5 * * * find /var/log -name "*.log" -mtime +30 -delete
# Docker-Logs aufräumen
0 6 * * 0 docker system prune -af
Updates und Wartung
# System-Updates jeden Montag um 3 Uhr
0 3 * * 1 apt update && apt upgrade -y
# Server einmal täglich neustarten (für Gameserver)
0 4 * * * systemctl restart minecraft
Monitoring
# Speicherplatz-Prüfung mit E-Mail-Warnung
0 8 * * * df -h | awk '{if ($5+0 > 90) print "Warnung: " $6 " ist " $5 " voll"}' | mail -s "Speicherplatz-Warnung" [email protected]
Cronjobs verwalten
# Alle Cronjobs des aktuellen Benutzers anzeigen
crontab -l
# Alle Cronjobs löschen (Vorsicht!)
crontab -r
# Alle Cronjobs aller Benutzer anzeigen
for user in $(cut -f1 -d: /etc/passwd); do echo "=== $user ==="; sudo crontab -u $user -l 2>/dev/null; done
Ausgabe und Logging
Standardmäßig wird die Ausgabe eines Cronjobs per E-Mail an den Benutzer geschickt. Das kannst du steuern:
# Ausgabe in Datei schreiben
0 3 * * * /pfad/zum/skript.sh >> /var/log/mein-cron.log 2>&1
# Ausgabe verwerfen (still)
0 3 * * * /pfad/zum/skript.sh > /dev/null 2>&1
# Nur Fehler loggen
0 3 * * * /pfad/zum/skript.sh >> /var/log/mein-cron.log 2>> /var/log/mein-cron-error.log
Systemweite Cronjobs (/etc/crontab)
Neben benutzerspezifischen Crontabs gibt es systemweite Cronjobs. Diese haben ein zusätzliches Feld für den Benutzer:
# In /etc/crontab
# m h dom mon dow user command
0 3 * * * root /usr/local/bin/backup.sh
Vorkonfigurierte Verzeichnisse für Skripte:
- /etc/cron.hourly/ – Wird jede Stunde ausgeführt
- /etc/cron.daily/ – Wird täglich ausgeführt
- /etc/cron.weekly/ – Wird wöchentlich ausgeführt
- /etc/cron.monthly/ – Wird monatlich ausgeführt
Lege einfach ein ausführbares Skript in das entsprechende Verzeichnis.
Häufige Probleme
Cronjob läuft nicht:
- Prüfe ob der Cron-Daemon läuft:
sudo systemctl status cron - Verwende absolute Pfade – Cron kennt deine PATH-Umgebung nicht
- Prüfe die Cron-Logs:
grep CRON /var/log/syslog
Prozentzeichen (%) in Befehlen:
- Prozentzeichen haben in Crontabs eine Sonderbedeutung. Mit Backslash escapen:
\%
Skript ist ausführbar, läuft aber nicht via Cron:
- Cron hat eine minimale Umgebung. Definiere SHELL und PATH am Anfang deiner Crontab:
SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 0 3 * * * /pfad/zum/skript.sh
Ausführliche Anleitungen zu Skripten und Automatisierung findest du in den Artikeln der linken Navigation.
NexoraHost
Eigener Server
Root-Zugriff für Linux-Admins – absichern mit unseren VPS/Root-Guides.
nexorahost.com · Maincubes FRA01 · 1 Tbit/s DDoS · 99,9 % Uptime