java每五分钟执行一次_Cron表达式每N分钟运行一次

如果你想每隔_2665302分钟运行一次cron,有三种情况需要考虑:

每 n 分钟(60可以被_2665304整除)

每分钟 n 分钟 YYYY-MM-DD HH:MM:00 (通用)

这是两个完全不同的情况,因为一个月内的天数 .

后一种情况涵盖了60不能被_2665307整除的情况,并且通过简单的数学计算,您很快就会发现需要一个起点 .

每隔n分钟(60可以被n整除)

为此,我们使用定义范围和步长值的组合:

man 5 crontab:步长值可以与范围结合使用 . 在带有/ 的范围之后指定在该范围内跳过数字值的跳过 . 例如,可以在'hours'字段中使用0-23 / 2来指定每隔一小时的命令执行(V7标准中的替代方案是0,2,4,6,8,10,12,14,16) ,18,20,22) . 星号后也允许步长值,因此如果指定要每两小时运行一次的作业,则可以使用* / 2 .

请参阅以下示例:

# 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

m/n * * * * command1

这里, command1 将从m到59每隔n分钟执行一次 .

这意味着 :

如果 m<=n ,它们将始终间隔 n 分钟 . 例如 . m=2,n=10 ::这项工作将在几分钟内运行 2,12,22,32,42,52

如果 m>n ,它们将始终间隔 n 分钟,除非在小时开始时 . 例如 . m=12,n=10 ::工作将在几分钟 12,22,32,42,52 运行 . 所以这里我们在 52 和 12th 分钟之间跳了20分钟 .

note: 你清楚地看到,如果 n 没有完美地划分60,你就会遇到问题 . 例如 . m=0,n=11 在 0,11,22,33,44,55 上运行,所以我们只有5分钟到下一次运行 .

从分钟YYYY-MM-DD HH开始每隔n分钟:MM:00

这个案例是通用的,涵盖60的不可分割性 .

这里变得更有趣,需要采用不同的方法 . 当您拥有特定日期的连续计数器时,可以解决此问题 . 输入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之后每隔_2665326分钟运行一次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

* * * * * mintestcmd "2015-10-21 07:28:00" 7 && command2

mintestcmd 定义为

#!/usr/bin/env bash

starttime=$(date -d "$1" "+%s")

# return UTC time

now=$(date "+%s")

# get the amount of minutes

delta=$(( (now - starttime) / 60 ))

# set the modulo

modulo=$2

# do the test

(( delta % modulo == 0))

Remark: UNIX时间以UTC格式给出 . 如果您的cron运行在受夏令时影响的不同时区,建议不要在2到3点之间运行命令 . 这可以跳过命令或运行命令两次(取决于时间是向前还是向后跳跃)

Remark: UNIX时间不受闰秒的影响

Remark: cron 没有亚秒精度

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值