NodeJS的定时任务
使用node-schedule库
| 1
 | npm install node-schedule
 | 
Node Schedule 中的每个定时任务都由一个Job对象表示。可以手动创建,然后执行schedule()方法以应用任务,或使用scheduleJob()如下。
Job对象是`EventEmitter,并发出以下事件:
- run每次执行后的事件。
- scheduled每次计划运行时的事件。
- 一canceled,当它在执行之前调用被取消的事件。
- 一个error当被触发调度作业调用抛出或退出事件拒绝Promise。
(scheduled和canceled事件都接收一个 JavaScript 日期对象作为参数)。 注意的是,任务是第一次立即执行的,因此如果使用scheduleJob()方法创建任务,将错过第一个scheduled 事件触发,但您可以手动查询调用。
Cron格式
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | *    *    *    *    *    *┬    ┬    ┬    ┬    ┬    ┬
 │    │    │    │    │    │
 │    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
 │    │    │    │    └───── month (1 - 12)
 │    │    │    └────────── day of month (1 - 31)
 │    │    └─────────────── hour (0 - 23)
 │    └──────────────────── minute (0 - 59)
 └───────────────────────── second (0 - 59, OPTIONAL)
 
 每分钟的第30秒触发: '30 * * * * *'
 
 每小时的1分30秒触发 :'30 1 * * * *'
 
 每天的凌晨1点1分30秒触发 :'30 1 1 * * *'
 
 每月的1日1点1分30秒触发 :'30 1 1 1 * *'
 
 2016年的1月1日1点1分30秒触发 :'30 1 1 1 2016 *'
 
 每周1的1点1分30秒触发 :'30 1 1 * * 1'
 
 | 
🤨这里是个人对node-schedule封装类来使用增删改查定时任务
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 
 | const schedule = require('node-schedule');
 exports.Interval = class Interval {
 constructor({ unit_name, maintain_time, last_alarm }) {
 this.unit_name = unit_name
 this.maintain_time = maintain_time
 this.last_alarm = last_alarm || ""
 }
 
 
 async create(callback) {
 
 if (this.last_alarm !== "") {
 this.delete(this.last_alarm)
 }
 schedule.scheduleJob(`${this.unit_name}`, `${this.maintain_time}`, callback);
 }
 
 
 delete() {
 if (schedule.scheduledJobs[this.unit_name]) {
 schedule.scheduledJobs[this.unit_name].cancel();
 return true
 }
 return false
 }
 
 
 findOne(name) {
 if (schedule.scheduledJobs[name]) {
 return schedule.scheduledJobs[name]
 } else {
 throw new Error("未找到任务名")
 }
 }
 
 
 findAll() {
 return schedule.scheduledJobs
 }
 }
 
 | 
这里是调用时定时任务Interval实例
| 12
 3
 4
 5
 6
 7
 8
 
 | new Util.Interval({
 unit_name: '自动分发任务 0 0 12 * * *',
 maintain_time: '0 0 12 * * *',
 last_alarm: '自动分发任务 0 0 12 * * *'
 }).create(async () => {
 
 })
 
 |