【问题标题】:Is it possible to execute cronjob in every 50 hours?是否可以每 50 小时执行一次 cronjob?
【发布时间】:2019-02-15 00:36:57
【问题描述】:

我一直在寻找每 50 小时执行一次脚本的 cron 计划。使用 cron 每 2 天运行一次作业很简单。我们可以表示像

0 0 */2 * * command

但是每 50 小时呢?

【问题讨论】:

    标签: cron


    【解决方案1】:

    如果你想每n 小时运行一次 cron,其中n 不除 24,你不能用 cron 干净地做到这一点,但它是可能的。为此,您需要在测试检查时间的 cron 中进行测试。这最好在查看 UNIX 时间戳时完成,即自 1970-01-01 00:00:00 UTC 以来的总秒数。假设我们想从 McFly 到达 Riverdale 的那一刻开始:

    % date -d '2015-10-21 07:28:00' +%s 
    1445412480
    

    对于在 `2015-10-21 07:28:00' 之后每隔 50th 小时运行一次的 cronjob,crontab 将如下所示:

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
    # |  |  |  |  |
    # *  *  *  *  *   command to be executed
     28  *  *  *  *   hourtestcmd "2015-10-21 07:28:00" 50 && command
    

    hourtestcmd 定义为

    #!/usr/bin/env bash
    starttime=$(date -d "$1" "+%s")
    # return UTC time
    now=$(date "+%s")
    # get the amount of hours
    hours=$(( (now - starttime) / 3600 ))
    # get the amount of remaining minutes
    minutes=$(( (now - starttime - hours*3600) / 60 ))
    # set the modulo
    modulo=$2
    # do the test
    (( now >= starttime )) && (( hours % modulo == 0 )) && (( minutes == 0 ))
    

    备注: UNIX 时间以 UTC 给出。如果您的 cron 在受夏令时影响的不同时区运行,则可能会导致程序以偏移量执行,或者当夏令时启用时,增量为 51 小时或 49 小时。

    备注:UNIX时间不受闰秒影响

    备注:cron没有亚秒级精度

    备注:请注意我如何将分钟与开始时间的分钟相同。这是为了确保 cron 仅每小时运行一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 2019-09-17
      • 1970-01-01
      • 2016-04-29
      • 2018-02-05
      相关资源
      最近更新 更多