【发布时间】:2018-04-15 12:09:24
【问题描述】:
我想知道是否有办法从环境变量中动态填充 cron 作业的时间。例如:
export JOB_MINUTES=4
然后在 crontab 中
$JOB_MINUTES * * * * /tmp/my_script.sh
导致
的 crontab4 * * * * /tmp/my_script.sh
【问题讨论】:
标签: bash automation cron environment-variables
我想知道是否有办法从环境变量中动态填充 cron 作业的时间。例如:
export JOB_MINUTES=4
然后在 crontab 中
$JOB_MINUTES * * * * /tmp/my_script.sh
导致
的 crontab4 * * * * /tmp/my_script.sh
【问题讨论】:
标签: bash automation cron environment-variables
环境变量不会在 crontab 文件中展开。但是您可以在创建 crontab 文件时使用环境变量,方法是将 echo 命令传送到 crontab。
{ crontab -l ; echo $JOB_MINUTES * * * * /tmp/my_script.sh; } | crontab -
- 文件名参数表示从标准输入获取 crontab 内容。
【讨论】:
基于@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
【讨论】:
"-":25 bad minute