2017-02-27 108 views
1

我正在嘗試在服務器上安裝新的cron任務。我能夠通過命令行運行該進程,但無法通過cron運行。這是由於PATH和PYTHONPATH的環境變量在通過cron運行任務時沒有正確設置。 (其實我有這樣的煩惱與服務器上的所有cron作業,但我專注於一個過程,這個問題爲簡單起見。)環境變量無法在cron任務中設置

下面是過程中的cron項:

### procmon NLite ### */2 * * * * . ~/.bashrc; cd /var/networkip/nlite/proc_mon; . bashrc; cd bin; ./proc_mon.py > /dev/null 2>&1

現在的.bashrc在proc_mon目錄包含:

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

pathadd PYTHONPATH ${BASEDIR}/lib 

所以,在運行的cron任務時 - PYTHONPATH 應該復位,但這種情況並非如此。

還有幾個其他的老服務器通過cron成功運行這些特效。
解決方案試圖迄今:

  • 相比,所有從的.bashrc或bash_profiles成功運行的cron任務的服務器無法運行crons
  • 登錄ENVIRON變量,以確認這是問題

我不感興趣的解決方案:

  • cron任務設置環境變量。有幾個需要通過cron運行的proc,並且相對於該特定腳本,都有不同的PATH和PYTHONPATH變量。這樣做可能會變得非常混亂,並且不是一個好的長期解決方案,因爲我在未來的服務器上安裝了相同的proc和cron。

進一步信息:

  • Linux發行版的服務器失敗的cron:CentOS版本6.8
  • Linux發行版與cron的成功服務器:紅帽企業Linux服務器版本5.2(Tikanga)

由於cron能夠在其他服務器上工作,因此必須有合理的解決方案解決問題。我也在超級用戶,所以MODS請讓我知道如果問題更適合該平臺。

+0

更新:環境變量實際上是沒有問題的。 Cron似乎在POSIX模式下運行。當'set + o posix'被添加到cron任務的開始時,proc成功運行。但仍需要一個更全面的解決方案... – datalie

回答

1

您需要exportbashrc您的變量爲他們由Python過程可以看出:

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

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

對不起,但請完整閱讀我的問題。我正在其他幾臺服務器上運行確切的cron任務,並且與其他服務器沒有任何問題。我清楚地表明,我知道您提供的「解決方案」,但對此不感興趣,因爲使用我正在安裝的軟件構建未來的服務器不僅麻煩,而且服務器上運行了幾個cron任務,所有這些任務都有不同與特定腳本相關的環境變量。 – datalie