如何每 4 小时减 1 秒运行一次 cronjob

如何每 4 小时减 1 秒运行一次 cronjob

我有来自 API 的数据,我想调用它并每 4 小时将数据转储到我的数据库中(当天数据)。我使用了以下内容:

0   */4 *   *   *

我的报告中的数据缺少一些值,我认为 cronjob 的调用方式如下:

today       00:00:00  -> should return nothing for today results
today       04:00:00  -> should return data for today
              ....
today       20:00:00  -> should return data for today
tomorrow    24:00:00  -> should return data for today, but this is tomorrow !

所以我现在想这样称呼它:

today       00:00:00  -> should return nothing for today results
today       03:59:59  -> should return data for today
              ....
today       19:59:59  -> should return data for today
tomorrow    23:59:59  -> should return data for today, but this is tomorrow !

我无法实现这个 cronjob。或者有更好的方法吗?

答案1

秒和负时间在 crontab 中是不可能的。只需在前一小时的第 59 分钟等待 59 秒即可。示例 crontab:

#
# minute  0-59
# hour    0-23
# dom     1-31
# mon     1-12 (or names)
# dow     0-7  (0 or 7 is Sun, or use names)
#
59 23,3,7,11,15,19 * * * sleep 59 && /bin/datadump

答案2

不幸的是,cron它的设计更多的是模式识别而不是算术,所以类似的东西-1 0 /4 * * *是行不通的。您可以使用逗号手动指定每小时,因此这应该会得到所需的结果:

59 59 3,7,11,15,19,23 * * *

不过,在整点之前运行一秒钟有点过于信任您的数据库。我个人会再给它几秒钟的时间来结束(否则它仍然会转储明天的数据)。

相关内容