我正在嘗試在服務器上安裝新的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請讓我知道如果問題更適合該平臺。
更新:環境變量實際上是沒有問題的。 Cron似乎在POSIX模式下運行。當'set + o posix'被添加到cron任務的開始時,proc成功運行。但仍需要一個更全面的解決方案... – datalie