node.js - 是否可以进行带有偏移的滚动 cron 作业?
问题描述
是否可以编写一个每 7 小时执行一次而没有固定时间的 cron 作业?例如,我知道我可以使用这种语法在 13 小时和 20 小时执行一次,因此相隔 7 小时但不滚动:
' * 13-23/7 * * * ',每天13h、20h执行
但我想要的实际上是:
13h,20h,第二天,3h,10h,17h,23h...
cron 这一切都可能吗?如果有帮助,我会使用 Node.js 包 node-schedule。
谢谢,克里斯蒂安
解决方案
这应该可以完成工作(请原谅双关语)..所以如果您希望每 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);
虽然我不确定那会有多稳定..
推荐阅读
- java - java.lang.IllegalStateException:在父或祖先上下文中找不到方法 play(View) 为 android:onClick 属性定义
- android - Flutter Dart 在构建期间使用过多内存
- cas - Apereo CAS 协议:是否允许 CAS 服务器更改 URL?
- python - Pycharm:安装 Pycurl 包但未找到 (ModuleNotFoundError)
- ios - 数组映射,斯威夫特
- sql - 在不使用临时表/外部表概念的情况下从文本/xls 文件获取更新/删除 SQL 语句的输入的最简单方法
- mongodb - 我想将 bcrypt.compare 与 mongoose/mongo enginee 搜索一起使用
- jquery - 模态弹出窗口,并在新选项卡中打开一个链接
- android - 为 Unity 上的 3D 角色添加适用于 Android 的操纵杆和触摸控件
- c - CS50 C 发出错误:数组初始值设定项必须是初始值设定项列表或字符串文字