node實現(xiàn)定時任務的方法:1、利用setTimeOut和event事件進行管理;2、對所有加入的事件進行排序,并且計算當前時間和最近一個事件發(fā)生時間的時間間隔;3、調用setTimeOut設置回調即可。
node.js極速入門課程:進入學習
本教程操作環(huán)境:linux7.3系統(tǒng)、node18.4.0版、Dell G3電腦。
node怎么實現(xiàn)定時任務?
node定時任務(node-schedule模塊)
實現(xiàn)一個每天凌晨十二點更新服務器上的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事件進行管理,對所有加入的事件進行排序,并且計算當前時間和最近一個事件發(fā)生時間的時間間隔,然后調用setTimeOut設置回調??偟膩碚f分兩種事件,一種是一次性的,一種是周期性的,一次性任務調用完就結束,周期性的會不斷地循環(huán)調用,當一個周期性事件被調用后,會根據周期生成下一個周期任務,并添加到任務列表中,重新排序。每個任務調用結束,都會計算并準備下一個任務。
一、設置定時器
node-schedule允許多種規(guī)則去實現(xiàn)定時
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時,執(zhí)行一個cron任務 var j = schedule.scheduleJob('42 * * * *', function(){ console.log('執(zhí)行了!'); });
登錄后復制
2.Date對象規(guī)則定時器
var schedule = require('node-schedule'); var date = new Date('2017-09-26 22:00:00'); var j = schedule.scheduleJob(date, function(){ console.log('執(zhí)行了!'); });
登錄后復制
3.RecurrenceRule實例規(guī)則定時器
var schedule = require('node-schedule'); var rule = new schedule.RecurrenceRule(); rule.minute = 42; var j = schedule.scheduleJob(rule, function(){ console.log('執(zhí)行了!'); });
登錄后復制
具體使用可查看github文檔https://github.com/node-schedule/node-schedule
推薦學習:《nodejs視頻教程》