是否可以编写一个cron作业,该作业每7小时执行一次,而不是一天中的固定时间?例如,我知道我可以在13点和20点执行此语法,因此相隔7小时但不能滚动:
'* 13-23 / 7 * * *',每天13h,20h执行
但是我想要的实际上是:
13h,20h,第二天,3h,10h,17h,23h ...
使用cron完全可以吗? 如果有帮助,我可以使用Node.js包的node-schedule。
谢谢, 克里斯蒂安
答案 0 :(得分:0)
这应该可以完成工作(对不起,这是双关语)..因此,如果您希望每隔X个小时运行一次,就cron表达式而言,这有点尴尬。进行诸如“每小时运行可被7整除的小时”之类的事情非常容易。
但是我们可以使用多个cron表达式来获得相同的结果,例如
0 6-20/7 * * 0
0 3-17/7 * * 1
0 0-21/7 * * 2
0 4-18/7 * * 3
0 1-22/7 * * 4
0 5-19/7 * * 5
0 2-23/7 * * 6
并设置7个单独的时间表。它们应该结合起来为您提供所需的顺序。
var schedule = require('node-schedule');
let scheduleList = [
'0 6-20/7 * * 0',
'0 3-17/7 * * 1',
'0 0-21/7 * * 2',
'0 4-18/7 * * 3',
'0 1-22/7 * * 4',
'0 5-19/7 * * 5',
'0 2-23/7 * * 6'
];
scheduleList.forEach(cron => {
schedule.scheduleJob(cron, function() {
console.log('Cron job running!');
})
});
我相信这会给出顺序(例如):
2019-03-17 06:00:00
2019-03-17 13:00:00
2019-03-17 20:00:00
2019-03-18 03:00:00
2019-03-18 10:00:00
2019-03-18 17:00:00
2019-03-19 00:00:00
2019-03-19 07:00:00
2019-03-19 14:00:00
2019-03-20 04:00:00
2019-03-20 11:00:00
2019-03-20 18:00:00
2019-03-21 01:00:00
2019-03-21 08:00:00
2019-03-21 15:00:00
2019-03-21 22:00:00
2019-03-22 05:00:00
2019-03-22 12:00:00
2019-03-22 19:00:00
2019-03-23 02:00:00
2019-03-23 09:00:00
2019-03-23 16:00:00
2019-03-23 23:00:00
2019-03-24 06:00:00
当然还要从那时开始重复。
您也可以使用setInterval,例如
setInterval(() => {
console.log('setInterval: job running!');
}, 7*60*60*1000);
尽管我不确定它的稳定性如何。