【问题标题】:Dynamically setting time of cron job based off of system variables根据系统变量动态设置 cron 作业的时间
【发布时间】:2018-04-15 12:09:24
【问题描述】:

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

export JOB_MINUTES=4

然后在 crontab 中

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

导致

的 crontab

4 * * * * /tmp/my_script.sh

【问题讨论】:

    标签: bash automation cron environment-variables


    【解决方案1】:

    环境变量不会在 crontab 文件中展开。但是您可以在创建 crontab 文件时使用环境变量,方法是将 echo 命令传送到 crontab

    { crontab -l ; echo $JOB_MINUTES * * * * /tmp/my_script.sh; } | crontab -
    

    - 文件名参数表示从标准输入获取 crontab 内容。

    【讨论】:

      【解决方案2】:

      基于@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
      

      【讨论】:

      • 运行命令时出现以下错误:"-":25 bad minute
      • 我需要转义脚本和 * 字符
      • 好点。我更新了答案并将 cron 行放在双引号内。
      猜你喜欢
      • 2023-03-23
      • 2012-05-03
      • 2019-05-23
      • 2021-11-13
      • 1970-01-01
      • 2012-05-21
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多