我有一个很长(并且很乱)的crontab(在我的Mac上)。所以我开始通过引入变量来清理它。然后我意识到连接变量(就像在Bash脚本中一样)在我的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日志有一个条目,上面写着“找不到路径”。
有人可以开导我吗?谢谢!
答案 0 :(得分:3)
在 crontab 文件中,看起来像VAR=value
的行是 cron 识别的定义,而不是在 shell 下执行。因此,变量定义的值不会以任何方式扩展。
另一方面, crontab条目中的命令由默认的 crontab shell执行,或者在您的情况下由用SHELL
变量定义的shell。
请注意,特定的 cron 版本可能不允许您定义任意变量,但只能定义SHELL
,HOME
,MAILTO
等特定变量。 Variables in crontab?