在crontab中连接变量将不起作用
问题描述:
我有一个非常漫长(和凌乱)的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日志有一个条目说“找不到路径”。
有人能够启发我吗?谢谢!
答
在的crontab文件,看起来像VAR=value
线定义由的cron认可和下壳不执行。所以变量定义的值不以任何方式扩展。
。另一方面,在crontab条目的命令,得到由默认的crontab壳或执行的,在你的情况下,通过与SHELL
变量定义的外壳。
也是要注意的是特定的cron版本可能不会让你定义任意变量,但只有特定的像SHELL
,HOME
,MAILTO
等见Variables in crontab?。
那么我的方法基本上是错的?我应该把细节和路径设置放入bash脚本中,并从cronjob中调用该脚本,而不是在crontab中设置路径等?如果是这样:脚本应该放在哪里?在我的Python项目文件夹? – Ugur
特定的* cron *版本可能不会让你定义变量,但我认为最可能的。所以使用你定义变量的方法来使* crontab *条目更清晰。只有,不要使用变量来定义(部分)另一个... –
另外,为了它的价值,我通常定义一个* bash *(shell)脚本来调用* crontab *中的程序。在脚本的头部,我根据需要定义变量,然后调用程序(在您的情况下为Python)。这给你一个准备文件,清理它们等的地方。 –