cron表达式实现40分钟执行一次的解决方案

因为玩cron有一段时间,长久以来困扰我的一个问题: 怎么用cron实现40分钟执行一次?
之前用了几种实现方案:
0 0/40 * * * ?
0 40-40 * * * ? 
0 */40 * * * ?

但是都不能实现。

一次想到在技术群里问一下,然后一个大神给了一个链接:

How do set cron to run my script every 40mins/25mins? - Stack Overflow

原来早就有人遇到过,这种问题需要使用组合表达式。
文中给出了两个表达式:
20 1,3,5,7,9,11,13,15,17,19,21,23 * * * ?
0,40 */2 * * * ?

最终总结出的表达式:
0 0,40 0/2 * * ? *
0 20 1,3,5,7,9,11,13,15,17,19,21,23 * * ?

按照上面的任务执行下来是这个样子的:
12:40  -->走第1个表达式
13:20  -->走第2个表达式
14:00  -->走第1个表达式

14:40  -->走第1个表达式
15:20  -->走第2个表达式
16:00  -->走第1个表达式

至此问题解决!

上面大神给出的链接中还有一个是关于25分钟执行一次的,也会遇到这种无法一个cron表达式处理的问题,感兴趣的可以进链接看看。

那么,如果是35分钟,45分钟呢?

我写了一段js代码,用于判断一个时间间隔需要多少个表达式,有需要的可以拿去:

// js判断n分钟执行的循环次数,跨越的小时数(每小时单独一个表达式)
var basedate = new Date('2020/09/12 00:00');
var date = new Date('2020/09/12 00:00');
console.log("date: " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds());
var num = 45; //时间间隔:分钟
for (var i = 1; i <= 121; i++) {
    date.setMinutes(date.getMinutes() + num);
    console.log("date: " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds());
    if (date.getMinutes() == basedate.getMinutes()) {
        console.log("---如果是每隔" + num +"分钟执行一次,循环第" + i + "次进入重新循环,跨越" + (date.getHours() - basedate.getHours()) + "个小时,所以需要" + (date.getHours() - basedate.getHours()) + "个表达式才能完成---");
        break;
    }
}

Js放到浏览器的Console控制台执行一下,就可以看到结果了:

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

willgon123

谢谢打赏,我将再接再厉!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值