# Cronjobs – Aufgaben automatisch planen

Cronjobs – Aufgaben automatisch planen – Server-Administration und Linux-Wissen von NexoraHost.

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" admin@domain.de`

## 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.*
