node如何实现定时任务

2022-11-07 09:09:17

node实现定时任务的方法:1、利用setTimeOut和event事件进行管理;2、对所有加入的事件进行排序,并且计算当前时间和最近一个事件发生时间的时间间隔;3、调用setTimeOut设置回调即可。

node定时任务(node-schedule模块)

实现一个每天凌晨十二点更新服务上的git代码的功能

koa2框架下的app.js文件

import schedule from 'node-schedule'; import updateCode from './controllers/hcpLan/fetch'   const app = new Koa();
  const router = new Router();
 
router.get( '/'(ctx, next) => {
      ctx.body = 'hello' });
 
app.use(router.routes()).use(router.allowedMethods());
 
  let rule = new schedule.RecurrenceRule() /**每天的凌晨12点更新代码*/ rule.hour = 0 rule.minute = 0 rule.second = 0 /**启动任务*/ schedule.scheduleJob(rule, () => {
  updateCode.cloneRepo();
  console.log('代码更新了!');
})
 
app.listen(3000)

node-schedule原理:利用setTimeOut和event事件进行管理,对所有加入的事件进行排序,并且计算当前时间和最近一个事件发生时间的时间间隔,然后调用setTimeOut设置回调。总的来说分两种事件,一种是一次性的,一种是周期性的,一次性任务调用完就结束,周期性的会不断地循环调用,当一个周期性事件被调用后,会根据周期生成下一个周期任务,并添加到任务列表中,重新排序。每个任务调用结束,都会计算并准备下一个任务。

一、设置定时器

node-schedule允许多种规则去实现定时

1. Cron风格定时器

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    |
│    │    │    │    │    └ 一周的星期 (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── 月份 (1 - 12)
│    │    │    └────────── 月份中的日子 (1 - 31)
│    │    └─────────────── 小时 (0 - 23)
│    └──────────────────── 分钟 (0 - 59)
└───────────────────────── 秒 (0 - 59, OPTIONAL)
  var schedule = require('node-schedule'); //当分钟为42时,执行一个cron任务 var j = schedule.scheduleJob('42 * * * *'function(){
  console.log('执行了!');
});

2.Date对象规则定时器

var schedule = require('node-schedule'); var date = new Date('2017-09-26 22:00:00');
  var j = schedule.scheduleJob(date, function(){
  console.log('执行了!');
});

3.RecurrenceRule实例规则定时器

var schedule = require('node-schedule');
  var rule = new schedule.RecurrenceRule();
rule.minute = 42;
  var j = schedule.scheduleJob(rule, function(){
  console.log('执行了!');
});