In Linux-Systemen ist der Cron-Daemon ein nützliches Werkzeug, um wiederkehrende Tasks oder Befehle automatisch zu bestimmten Zeiten auszuführen. Dies ist besonders praktisch, wenn Du regelmäßig wiederkehrende Befehle oder Skripte ausführen möchtest, ohne dass Du manuell eingreifen musst. Eine Möglichkeit, Cron-Jobs zu definieren, ist durch das Anlegen von Dateien im Verzeichnis /etc/cron.d.

Warum /etc/cron.d?

Das Verzeichnis /etc/cron.d bietet eine einfache Möglichkeit, systemweite Cron-Jobs zu definieren, die unabhängig vom Benutzerkonto laufen. Während Cron-Jobs normalerweise über den Befehl crontab -e für jeden Benutzer individuell eingerichtet werden, kannst Du mit /etc/cron.d systemweite Jobs verwalten und dabei für jeden Job eine eigene Datei anlegen.

Aufbau einer Datei in /etc/cron.d

Eine Datei in /etc/cron.d hat ein spezielles Format. Jede Zeile definiert einen Job und besteht aus den folgenden Teilen:

  1. Zeitplan – wann der Job ausgeführt werden soll.
  2. Benutzer – als welcher Benutzer der Befehl ausgeführt wird.
  3. Befehl – der auszuführende Befehl oder das Skript.

Der allgemeine Aufbau sieht so aus:

* * * * * Benutzer Befehl

Die Sterne repräsentieren die Zeitfelder, die wie folgt definiert sind:

* * * * * Benutzer Befehl
- - - - -
| | | | |
| | | | +----- Wochentag (0 - 7) (Sonntag ist 0 oder 7)
| | | +---------- Monat (1 - 12)
| | +--------------- Tag (1 - 31)
| +-------------------- Stunde (0 - 23)
+------------------------- Minute (0 - 59)

Beispiel: Tägliches Backup um 3:00 Uhr

Stellen wir uns vor, Du möchtest ein tägliches lokales Backup Deiner Datenbank um 3:00 Uhr morgens durchführen. Dafür könntest Du eine Datei namens backup in /etc/cron.d anlegen und den folgenden Inhalt hinzufügen:

0 3 * * * root /usr/local/bin/backup.sh

Dieser Cron-Job wird jeden Tag um 3:00 Uhr morgens als Benutzer root ausgeführt und startet das Skript /usr/local/bin/backup.sh. Der Benutzer wird hier explizit definiert, da systemweite Cron-Jobs immer einen Benutzer erfordern.

Beispiel: Einen Job jeden Montag um 12:00 Uhr ausführen

Angenommen, Du möchtest ein Skript, das Logs bereinigt, jeden Montag um 12:00 Uhr ausführen. Dazu erstellst Du eine neue Datei im /etc/cron.d-Verzeichnis, zum Beispiel log_cleanup, und fügst den folgenden Code ein:

0 12 * * 1 root /usr/local/bin/log_cleanup.sh

Dieser Job wird jeden Montag (1 steht für Montag) um genau 12:00 Uhr ausgeführt.

Tipps für die Verwendung von /etc/cron.d

Log-Ausgabe überwachen:
Cron-Jobs haben standardmäßig keine sichtbare Ausgabe. Um sicherzustellen, dass Du Fehler oder Erfolge nachvollziehen kannst, leite die Ausgabe der Befehle in Log-Dateien um:

0 12 * * 1 root /usr/local/bin/log_cleanup.sh >> /var/log/cron.log 2>&1


Dieser Befehl speichert sowohl die normale Ausgabe (stdout) als auch die Fehlermeldungen (stderr) in die Datei /var/log/cron.log.

Umgebungsvariablen setzen:
Cron-Jobs verwenden eine minimale Umgebung. Wenn Dein Skript bestimmte Umgebungsvariablen benötigt, kannst Du diese entweder im Skript selbst oder direkt in der Cron-Datei definieren:

SHELL=/bin/bash 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 12 * * 1 root /usr/local/bin/log_cleanup.sh

Rechte überprüfen:
Stelle sicher, dass die Dateien in /etc/cron.d die richtigen Berechtigungen haben. Sie sollten üblicherweise mit root-Rechten erstellt und nur von root oder privilegierten Benutzern bearbeitet werden. Dies kannst Du mit chmod 644 /etc/cron.d/filename sicherstellen.

Beispiel für eine vollständige Cron-Datei

Nehmen wir an, Du möchtest mehrere Jobs in einer Datei kombinieren. Hier ein Beispiel für eine Datei /etc/cron.d/multiple_jobs, die verschiedene Tasks für unterschiedliche Zeiten plant:

# Umgebungsvariablen
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Job 1: Tägliches Backup um 2:00 Uhr
0 2 * * * root /usr/local/bin/backup.sh

# Job 2: Logs bereinigen jeden Montag um 12:00 Uhr
0 12 * * 1 root /usr/local/bin/log_cleanup.sh

# Job 3: Wartungsskript jeden Sonntag um 5:00 Uhr
0 5 * * 0 root /usr/local/bin/maintenance.sh >> /var/log/maintenance.log 2>&1

Hilfe bei Einrichtung von Cronjobs benötigt?

Du hast mehrere Möglichkeiten, dir helfen zu lassen. Zum einen steht Dir als PPH Pro Kunde im Webinterface ein Cronjob-Manager zur Verfügung. Du kannst hier Cronjobs verwalten, einstellen, aktivieren und deaktivieren oder entfernen.

Solltest du kein PPH Pro Kunde sein, kannst Du dich gerne bei uns im Support melden. Wir helfen Dir dann weiter!