2017-02-27 3 views
1

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

Jetzt

, 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.

+0

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

Antwort

1

Sie benötigen Variablen in Ihrem bashrcexport für sie vom Python-Prozess zu sehen:

BASEDIR=$PWD 
export KODIAK_ROOT=$BASEDIR/ 
export BASEPATH=$KODIAK_ROOT 

pathadd PYTHONPATH ${BASEDIR}/lib 
export PYTHONPATH 
+0

Es tut mir leid, aber bitte lesen Sie meine Frage vollständig. Ich führe die genauen Cron-Aufgaben auf mehreren anderen Servern aus und habe keine Probleme mit den anderen. Ich erkläre klar, dass ich die "Lösung" kenne, die Sie zur Verfügung gestellt haben, aber nicht daran interessiert, da es nicht nur für zukünftige Server-Builds mit der Software, die ich installiere, mühsam ist, sondern es verschiedene Cron-Tasks auf dem Server gibt Umgebungsvariablen relativ zu diesem bestimmten Skript. – datalie

Verwandte Themen