我在运行 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
# ...