基于系统变量动态设置cron作业的时间

时间:2017-11-02 20:40:45

标签: bash automation cron environment-variables

我想知道是否有办法动态填充环境变量的cron作业的时间。例如:

export JOB_MINUTES=4

然后在crontab中

$JOB_MINUTES * * * * /tmp/my_script.sh

导致

的crontab

4 * * * * /tmp/my_script.sh

2 个答案:

答案 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 -
  • 只是替换时间规范的第一个标记
  • 假设cron作业在其命令行中有/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