我想知道是否有办法动态填充环境变量的cron作业的时间。例如:
export JOB_MINUTES=4
然后在crontab中
$JOB_MINUTES * * * * /tmp/my_script.sh
导致
的crontab 4 * * * * /tmp/my_script.sh
答案 0 :(得分:0)
环境变量未在crontab文件中展开。但是,在创建crontab文件时,可以通过将echo
命令传递给crontab
来使用环境变量。
{ crontab -l ; echo $JOB_MINUTES * * * * /tmp/my_script.sh; } | crontab -
-
filename参数表示从标准输入中获取crontab内容。
答案 1 :(得分:0)
基于@barmar的解决方案,但是这个解决方案进行了就地替换:
{ crontab -l | sed -E "s#^[^ ]* (.*/tmp/my_script.sh.*)#$JOB_MINUTES \1#"; } | crontab -
/tmp/my_script.sh
(根据您的要求进行更改)您可以将两种方法合二为一:
if ! crontab -l | grep -q /tmp/my_script.sh; then
# add to cron
{ crontab -l ; echo "$JOB_MINUTES * * * * /tmp/my_script.sh"; } | crontab -
else
# update cron
{ crontab -l | sed -E "s#^[^ ]* (.*/tmp/my_script.sh.*)#$JOB_MINUTES \1#"; } | crontab -
fi