Scripte per Cronjob starten

Falls durch einen Cronjob gestartete Scripte nicht richtig ausgeführt werden oder andere Ergebnisse liefern als erwartet kann das an fehlenden Pfaden (PATH) in den Umgebungsvariablen des Cron liegen. Diese sind beim Ausführen von der Shell andere als bei der Ausführung durch Cron. Ein Script kann somit in der Shell ordnungsgemäß arbeiten aber Probleme beim Ausführen durch Cron haben.

Vergleich der Pfade von Shell und Cron

In der Shell bekommen wir alle Umgebungsvariablen mit dem Befehl printenv:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
root@myserver:~# printenv | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@myserver:~# printenv | grep PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@myserver:~# printenv | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Diesen Befehl nutzen wir nun um eine Ausgabe durch Cron zu erreichen:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
root@myserver:~# crontab -e
root@myserver:~# crontab -e
root@myserver:~# crontab -e

Wir ergänzen bereits bestehende Einträge um eine Zeile mit dem Inhalt:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
*/1 * * * * printenv | grep PATH > /root/printenv.cron
*/1 * * * * printenv | grep PATH > /root/printenv.cron
*/1  *  *  *  *  printenv | grep PATH > /root/printenv.cron

Nach Ablauf einer vollen Minute können wir den Eintrag aus der crontab wieder entfernen, da er jede volle Minute erneut ausgeführt wird.

Wir können uns nun den Inhalt der Datei printenv.cron ansehen:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
root@myserver:~# cat /root/printenv.cron
PATH=/usr/bin:/bin
root@myserver:~# cat /root/printenv.cron PATH=/usr/bin:/bin
root@myserver:~# cat /root/printenv.cron
PATH=/usr/bin:/bin

Wie man sehen kann, sind die Pfade des Cron nur auf /usr/bin und /bin gesetzt.

Ergänzen der Pfade in der crontab

Wir können nun die Pfade in der crontab ergänzen. Dazu öffnen wir die crontab und fügen die Pfade vor den Cronjobs hinzu:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Ergänzen der Einträge für Python-Scripte

Für die Ausführung von Python-Scripten fügen wir folgende Einträge hinzu:

Für Phyton 3.7:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.7/dist-packages/
PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.7/dist-packages/
PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.7/dist-packages/

Für Python 2.7

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.2/dist-packages/
PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.2/dist-packages/
PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.2/dist-packages/