Wie legt man Umgebungsvariablen für Crontab-Jobs fest?

Veröffentlicht 8. September 2024

Problem: Umgebungsvariablen in Crontab-Jobs setzen

Crontab-Jobs benötigen oft Zugriff auf Umgebungsvariablen, aber diese Variablen sind in der Cron-Umgebung nicht automatisch verfügbar. Dies kann zu unerwartetem Verhalten oder Fehlern führen, wenn geplante Aufgaben ausgeführt werden, die von bestimmten Umgebungseinstellungen abhängen.

Lösungen zum Setzen von Umgebungsvariablen in Crontab

Methode 1: Variablen direkt in Crontab definieren

Sie können Umgebungsvariablen in der Crontab-Datei setzen. Gehen Sie dazu wie folgt vor:

  1. Öffnen Sie die Crontab-Datei zur Bearbeitung:

    crontab -e
  2. Fügen Sie Ihre Umgebungsvariablen am Anfang der Datei hinzu:

    LANG=de_DE.UTF-8
    PATH=/usr/local/bin:/usr/bin:/bin
  3. Fügen Sie Ihre Cron-Job-Einträge hinzu:

    0 * * * * /pfad/zu/ihrem/skript.sh

Diese Methode funktioniert für Variablen, die spezifisch für Ihre Cron-Jobs sind.

Tipp: Umgebungsvariablen überprüfen

Nach dem Setzen der Umgebungsvariablen in Crontab können Sie diese überprüfen, indem Sie einen Test-Job hinzufügen:

* * * * * env > /tmp/cron-env.txt

Dies schreibt alle Umgebungsvariablen in eine Datei, sodass Sie überprüfen können, ob sie korrekt gesetzt sind.

Methode 2: Umgebungsdateien in Crontab-Befehlen sourcen

Sie können Ihre Umgebungsdateien innerhalb von Crontab-Einträgen sourcen:

  1. Bearbeiten Sie Ihre Crontab-Datei:

    crontab -e
  2. Fügen Sie einen Befehl hinzu, um Ihre Umgebungsdatei zu sourcen, bevor Sie Ihr Skript ausführen:

    0 * * * * . $HOME/.bash_profile; /pfad/zu/ihrem/skript.sh

Dies lädt alle Variablen aus Ihrem .bash_profile (oder .bashrc) für jeden Cron-Job.

Methode 3: Erstellen eines Wrapper-Skripts

Ein Wrapper-Skript kann die Umgebung einrichten, bevor Ihr Hauptskript ausgeführt wird:

  1. Erstellen Sie ein Wrapper-Skript, z.B. 'wrapper.sh':

    #!/bin/bash
    source $HOME/.bash_profile
    /pfad/zu/ihrem/hauptskript.sh
  2. Machen Sie das Wrapper-Skript ausführbar:

    chmod +x wrapper.sh
  3. Rufen Sie in Ihrem Crontab das Wrapper-Skript auf:

    0 * * * * /pfad/zu/wrapper.sh

Diese Methode ist nützlich, wenn Sie eine komplexe Umgebung für Ihre Cron-Jobs einrichten müssen.

Beispiel: Logging im Wrapper-Skript

Sie können Ihrem Wrapper-Skript Logging hinzufügen, um bei der Fehlersuche zu helfen:

#!/bin/bash
echo "Job startet am $(date)" >> /var/log/cron_jobs.log
source $HOME/.bash_profile
/pfad/zu/ihrem/hauptskript.sh
echo "Job beendet am $(date)" >> /var/log/cron_jobs.log

Dies protokolliert die Start- und Endzeiten jeder Job-Ausführung.