Ich versuche, eine neue Cron-Task auf einem Server zu installieren. Ich kann den Prozess über die Befehlszeile ausführen, kann ihn aber nicht über cron ausführen. Dies liegt daran, dass Umgebungsvariablen für PATH und PYTHONPATH nicht korrekt festgelegt sind, wenn die Task über cron ausgeführt wird. (Ich habe tatsächlich diese Mühe mit allen Cron-Jobs auf dem Server, aber der Einfachheit halber in dieser Frage auf einen Prozess bin konzentriert.)Umgebungsvariablen können nicht in Cron-Task gesetzt werden
Hier ist der cron-Eintrag für den Prozess:
### procmon NLite ### */2 * * * * . ~/.bashrc; cd /var/networkip/nlite/proc_mon; . bashrc; cd bin; ./proc_mon.py > /dev/null 2>&1
, bashrc im proc_mon Verzeichnis enthält:
BASEDIR=$PWD
KODIAK_ROOT=$BASEDIR/
BASEPATH=$KODIAK_ROOT
pathadd PYTHONPATH ${BASEDIR}/lib
Also, wenn die cron Task ausgeführt wird - PYTHONPATH sollte zurückgesetzt werden, aber dies ist nicht der Fall.
Es gibt mehrere andere ältere Server, die diese Procs über Cron erfolgreich ausführen.
Lösungen versucht, so weit: Versagen
- verglichen alle bashrc oder bash_profiles von einem erfolgreichen Crontask an den Server mit crons
- protokolliert environ Variablen laufen, um zu bestätigen dies ist das Problem
Lösungen, die mich nicht interessieren:
- eine Cron-Aufgabe zum Festlegen von Umgebungsvariablen. Es gibt mehrere Prozeduren, die über cron ausgeführt werden müssen, und alle haben unterschiedliche PATH- und PYTHONPATH-Variablen relativ zu diesem spezifischen Skript. Dies könnte sehr chaotisch werden und ist keine gute langfristige Lösung, da ich die gleichen Procs und Crons auf zukünftigen Servern installiere.
Weitere Informationen:
- Linux-Distribution für Server-Fehler cron: CentOS Release 6.8
- Linux-Distribution für Server mit cron Erfolg: Red Hat Enterprise Linux Server Version 5.2 (Tikanga)
Da der Crons auf anderen Servern arbeiten kann, muss es eine vernünftige Lösung für das Problem geben. Ich bin auch auf SuperUser, also mods lass es mich wissen, wenn die Frage besser für diese Plattform geeignet ist.
Update: Umgebungsvariablen sind eigentlich nicht das Problem. Cron scheint im POSIX-Modus zu laufen. Wenn 'set + o posix' am Anfang einer Cron-Aufgabe hinzugefügt wird, wird die Prozedur erfolgreich ausgeführt. Aber immer noch eine globalere Lösung ... – datalie