node實(shí)現(xiàn)定時任務(wù)的方法:1、利用setTimeOut和event事件進(jìn)行管理;2、對所有加入的事件進(jìn)行排序,并且計算當(dāng)前時間和最近一個事件發(fā)生時間的時間間隔;3、調(diào)用setTimeOut設(shè)置回調(diào)即可。
node.js極速入門課程:進(jìn)入學(xué)習(xí)
本教程操作環(huán)境:linux7.3系統(tǒng)、node18.4.0版、Dell G3電腦。
node怎么實(shí)現(xiàn)定時任務(wù)?
node定時任務(wù)(node-schedule模塊)
實(shí)現(xiàn)一個每天凌晨十二點(diǎn)更新服務(wù)器上的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點(diǎn)更新代碼*/ rule.hour = 0 rule.minute = 0 rule.second = 0 /**啟動任務(wù)*/ schedule.scheduleJob(rule, () => { updateCode.cloneRepo(); console.log('代碼更新了!'); }) app.listen(3000)
node-schedule原理:利用setTimeOut和event事件進(jìn)行管理,對所有加入的事件進(jìn)行排序,并且計算當(dāng)前時間和最近一個事件發(fā)生時間的時間間隔,然后調(diào)用setTimeOut設(shè)置回調(diào)??偟膩碚f分兩種事件,一種是一次性的,一種是周期性的,一次性任務(wù)調(diào)用完就結(jié)束,周期性的會不斷地循環(huán)調(diào)用,當(dāng)一個周期性事件被調(diào)用后,會根據(jù)周期生成下一個周期任務(wù),并添加到任務(wù)列表中,重新排序。每個任務(wù)調(diào)用結(jié)束,都會計算并準(zhǔn)備下一個任務(wù)。
一、設(shè)置定時器
node-schedule允許多種規(guī)則去實(shí)現(xiàn)定時
1. Cron風(fēng)格定時器
* * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ | │ │ │ │ │ └ 一周的星期 (0 - 7) (0 or 7 is Sun) │ │ │ │ └───── 月份 (1 - 12) │ │ │ └────────── 月份中的日子 (1 - 31) │ │ └─────────────── 小時 (0 - 23) │ └──────────────────── 分鐘 (0 - 59) └───────────────────────── 秒 (0 - 59, OPTIONAL) var schedule = require('node-schedule'); //當(dāng)分鐘為42時,執(zhí)行一個cron任務(wù) 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實(shí)例規(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
推薦學(xué)習(xí):《nodejs視頻教程》