Cron-Jobs unter Linux einrichten & verwalten
Cron-Jobs unter Linux einrichten & verwalten
Zusammenfassung:
Dieser Artikel dokumentiert die Einrichtung und Verwaltung von Cron-Jobs unter Linux. Es werden die crontab-Syntax mit praktischen Beispielen, die Unterschiede zwischen Benutzer-crontab und System-Cron-Verzeichnissen sowie systemd-Timer als moderne Alternative erläutert.
1. crontab-Grundlagen
Der cron-Daemon führt geplante Aufgaben zu definierten Zeitpunkten aus. Die Konfiguration erfolgt über die crontab-Datei des jeweiligen Benutzers.
Crontab bearbeiten
crontab -e
Beim ersten Aufruf wird ein Editor ausgewählt (Standard: nano). Für dauerhaft nano:
EDITOR=nano crontab -e
Crontab anzeigen / löschen
crontab -l # Aktuelle crontab anzeigen
crontab -r # Crontab vollständig löschen (Vorsicht!)
crontab -l > backup.txt # Sicherungskopie erstellen
2. Syntax
* * * * * /pfad/zum/befehl
│ │ │ │ │
│ │ │ │ └── Wochentag (0–7, 0 und 7 = Sonntag)
│ │ │ └──── Monat (1–12)
│ │ └────── Tag (1–31)
│ └──────── Stunde (0–23)
└────────── Minute (0–59)
Sonderwerte
| Ausdruck | Bedeutung |
|---|---|
*
|
Jeder Wert |
*/5
|
Alle 5 Einheiten (z. B. alle 5 Minuten) |
1,15
|
Wert 1 und 15 |
1-5
|
Bereich von 1 bis 5 |
@reboot
|
Einmalig beim Systemstart |
@daily
|
Täglich um 00:00 |
@weekly
|
Wöchentlich |
@monthly
|
Monatlich |
3. Praktische Beispiele
# Jeden Tag um 03:00 Uhr ein Backup-Skript ausführen
0 3 * * * /home/benutzer/skripte/backup.sh
# Alle 15 Minuten einen Sync-Befehl ausführen
*/15 * * * * /usr/bin/rsync -a /quelle/ /ziel/
# Jeden Montag um 08:00 einen Wochenbericht erstellen
0 8 * * 1 /home/benutzer/skripte/wochenbericht.sh
# Beim Systemstart ein Skript ausführen
@reboot /home/benutzer/skripte/start.sh
# Jeden 1. des Monats um 00:00 Log-Dateien archivieren
0 0 1 * * tar -czf /backup/logs-$(date +\%Y\%m).tar.gz /var/log/app/
4. Ausgabe in Log-Datei umleiten
Cron sendet Ausgabe standardmäßig per E-Mail. Für Systeme ohne Mail-Setup empfiehlt sich die Umleitung in eine Datei:
# Nur stdout in Datei schreiben
0 3 * * * /pfad/skript.sh >> /var/log/mein-cron.log 2>&1
# Ausgabe komplett verwerfen (kein Log)
0 3 * * * /pfad/skript.sh > /dev/null 2>&1
5. System-Cron-Verzeichnisse
Für systemweite Aufgaben (als Root) stehen vordefinierte Verzeichnisse bereit:
| Verzeichnis | Ausführungsintervall |
|---|---|
/etc/cron.daily/
|
Täglich |
/etc/cron.weekly/
|
Wöchentlich |
/etc/cron.monthly/
|
Monatlich |
/etc/cron.hourly/
|
Stündlich |
/etc/cron.d/
|
Eigene Zeitpläne (crontab-Format) |
Skripte in diesen Verzeichnissen müssen ausführbar sein (chmod +x) und dürfen keine Dateiendung haben.
6. Alternative: systemd-Timer
Auf modernen Systemen sind systemd-Timer die bevorzugte Alternative zu Cron, da sie besser in das Logging integriert sind.
Beispiel: Täglicher Timer
Service-Datei /etc/systemd/system/backup.service:
[Unit]
Description=Tägliches Backup
[Service]
Type=oneshot
ExecStart=/home/benutzer/skripte/backup.sh
Timer-Datei /etc/systemd/system/backup.timer:
[Unit]
Description=Backup täglich um 03:00
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
Aktivieren:
sudo systemctl enable --now backup.timer
systemctl list-timers # Alle aktiven Timer anzeigen
Hat euch dieser Beitrag gefallen?
Dann lasst gern ein Like da.