node實作定時任務的方法:1、利用setTimeOut和event事件進行管理;2、對所有加入的事件進行排序,並且計算當前時間和最近一個事件發生時間的時間間隔;3、調用setTimeOut設定回調即可。
本教學操作環境:linux7.3系統、node18.4.0版、Dell G3電腦。
node怎麼實現定時任務?
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('执行了!'); });
具體使用可查看github文件https://github.com/node-schedule/node-schedule
推薦學習:《nodejs影片教學》
以上是node怎麼實現定時任務的詳細內容。更多資訊請關注PHP中文網其他相關文章!