无法访问 crontab 配置中的 shell 变量

无法访问 crontab 配置中的 shell 变量

我在运行 cron 作业时无法访问 shell 变量。实际上,我创建了一个作业,将两个 shell 变量值打印到文件中env.output

我正在使用命令$ crontab -e(无需 sudo 用户)编写 cron 作业。

我的 crontab 配置文件如下所示:-

# varibales
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
     /usr/games:/usr/local/games
[email protected]
HOME=/home/ubuntu
JOBS_PATH=${HOME}/cronjobs

# Jobs
* * * * * echo "$HOME and $JOBS_PATH" >> ${HOME}/env.output 2>&1

所以,现在当我看到文件的内容时env.output,我得到了这个输出

/home/ubuntu and ${HOME}/cronjobs

我认为这是意料之外的。

我希望我的输出应该是这样的:-

/home/ubuntu and /home/ubuntu/cronjobs

请建议我一些方法来处理这个问题。

答案1

这是 cron 守护程序的限制。请参阅crontab 的手册页

值字符串是不是解析环境替代或变量替换,因此如下行:

     PATH = $HOME/bin:$PATH

不会像你期望的那样工作。

你可以采取一种解决方法,因为 bash 将波浪符号 ( ~) 视为 的替代$HOME。因此使用:

JOBS_PATH=~/cronjobs

答案2

我在访问 shell 变量时遇到问题

HOME因为顶部定义的 crontab 不是一个 shell 变量,而是一个环境变量。

您不能在 crontab 的顶部引用环境变量,因为没有 shell 处理它们,因此它们不会被扩展(和按字面意思解释)。

您必须JOBS_PATH手动设置:

# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...

相关内容