【问题标题】:Crontab setting - execute script every 55 minutescrontab 设置 - 每 55 分钟执行一次脚本
【发布时间】:2016-10-12 00:37:37
【问题描述】:

我在创建crontab 设置的过程中发现了一件有趣的事情。

我使用了这个命令:

crontab -e

并填写这一行:

*/55 * * * * export DISPLAY=:0 && /home/user/Documents/script.sh $2>/dev/null

我的想法是创建调度程序,它每 55 分钟启动一次script.sh

但是这个脚本是在这个时间执行的(例如):

08:55, 09:00, 09:05, 09:55, 10:00, 10:05, ...

我不知道为什么。

谁能解释一下?

【问题讨论】:

  • 应该是这样的:55 * * * * export DISPLAY=:0 && /home/user/Documents/script.sh $2>/dev/null
  • @Hackerman 这意味着“每小时的第 55 分钟”。我认为 OP 要求“05:55、06:50、07:45”......即每 55 个滚动分钟,而不是每小时的第 55 个静态分钟。 Jan,你能澄清一下吗?

标签: linux export crontab scheduler


【解决方案1】:

像这样替换脚本,它应该可以工作。

 */5 * * * * [ $(( $(date +%s) / 60 % 55 )) -eq 0 ] && export DISPLAY=:0 && /home/user/Documents/script.sh $2>/dev/null

分-时-日-月-年

*   any value
,   value list separator
-   range of values
/   step values

【讨论】:

    【解决方案2】:

    另一种选择是自我复制的“在”工作。与 cron 相比的唯一优势是它不那么明显,而且如果您需要它不是每隔 X 分钟启动一次,而是在最后一个作业完成后 X 分钟启动一次。因此,您的脚本将只包含一行以在退出之前创建一个新的“at”作业。比如:

    echo "/full/path/to/my/script > /root/myScript.at.log" | at now + X minutes
    

    【讨论】:

      【解决方案3】:

      所以它会每 5 分钟执行一次:

      自 1. 1. 1970 以来经过的秒数除以 60 = 多少分钟

      回显 $(日期 +%s) 1476201056 ... 第二

      回显 $(( $(date +%s) / 60 )) 24603351 ... 分钟

      之后它将对分钟数使用模

      取模结果为0时,发送TRUE值。

      而且是典型的逻辑AND

      [ $((......)) -eq 0 ] && 导出显示.. && .../script.sh

      谢谢。

      真的很有帮助:)

      【讨论】:

        猜你喜欢
        • 2016-11-21
        • 2014-03-07
        • 1970-01-01
        • 2011-07-20
        • 2014-03-25
        • 1970-01-01
        • 1970-01-01
        • 2018-11-10
        相关资源
        最近更新 更多