2017-10-28 24 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)。这给你一个准备文件,清理它们等的地方。 –