2017-10-28 62 views
1

我有一個非常漫長(和凌亂)的crontab(在我的Mac上)。所以我開始通過引入變量來清理它。然後我意識到連接變量(就像在Bash腳本中)在我的crontab中不起作用。這是我有:在crontab中連接變量將不起作用

SHELL=/bin/bash 
HOME=/Users/leuchtturm 
# [1] Previously had this, but this does not seem to work 
# $HOME is not being evaluated? Why? 
# 
# VIRTUALENV_PYTHON=$HOME/.virtualenvs/py361/bin/python 
# Now I have this (elaborated) 
VIRTUALENV_PYTHON=/Users/leuchtturm/.virtualenvs/py361/bin/python 

# the crontab entry 
# Here $HOME is being expanded, but not in the example above [1] 
# 
*/2 * * * * source $HOME/.config_vars && $VIRTUALENV_PYTHON $HOME/workspace/monitoring/check_server.py 

所以在這條線上 VIRTUALENV_PYTHON=$HOME/.virtualenvs/py361/bin/python變量$HOME不被評估。我的cron日誌有一個條目說「找不到路徑」。

有人能夠啓發我嗎?謝謝!

回答

2

的crontab文件,看起來像VAR=value線定義由的cron認可和下殼執行。所以變量定義的值不以任何方式擴展。

。另一方面,在crontab條目命令,得到由默認的crontab殼或執行的,在你的情況下,通過與SHELL變量定義的外殼。

也是要注意的是特定的cron版本可能不會讓你定義任意變量,但只有特定的像SHELLHOMEMAILTO等見Variables in crontab?

+0

那麼我的方法基本上是錯的?我應該把細節和路徑設置放入bash腳本中,並從cronjob中調用該腳本,而不是在crontab中設置路徑等?如果是這樣:腳本應該放在哪裏?在我的Python項目文件夾? – Ugur

+0

特定的* cron *版本可能不會讓你定義變量,但我認爲最可能的。所以使用你定義變量的方法來使* crontab *條目更清晰。只有,不要使用變量來定義(部分)另一個... –

+1

另外,爲了它的價值,我通常定義一個* bash *(shell)腳本來調用* crontab *中的程序。在腳本的頭部,我根據需要定義變量,然後調用程序(在您的情況下爲Python)。這給你一個準備文件,清理它們等的地方。 –