node項目中怎么創(chuàng)建定時任務?下面本篇文章給大家介紹一下在node項目中怎么使用Node Schedule制定定時任務腳本,希望對大家有所幫助!
nodejs的后端也是需要定時任務做處理,例如備份,定時發(fā)送郵件,結算等操作,所以使用了Node Schedule這個npm幫助我們制定定時任務腳本。
npm install node-schedule
Node Schedule 中的每個定時任務都由一個Job
對象表示??梢允謩觿?chuàng)建,然后執(zhí)行schedule()
方法以應用任務,或使用scheduleJob()
如下。
Job
對象是`EventEmitter,并發(fā)出以下事件:
run
每次執(zhí)行后的事件。scheduled
每次計劃運行時的事件。- 一
canceled
,當它在執(zhí)行之前調用被取消的事件。 - 一個
error
當被觸發(fā)調度作業(yè)調用拋出或退出事件拒絕Promise
。
(scheduled
和canceled
事件都接收一個 JavaScript 日期對象作為參數(shù))。 注意的是,任務是第一次立即執(zhí)行的,因此如果使用scheduleJob()
方法創(chuàng)建任務,將錯過第一個scheduled
事件觸發(fā),但您可以手動查詢調用。
Cron格式
* * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ │ │ └ 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秒觸發(fā): '30 * * * * *' 每小時的1分30秒觸發(fā) :'30 1 * * * *' 每天的凌晨1點1分30秒觸發(fā) :'30 1 1 * * *' 每月的1日1點1分30秒觸發(fā) :'30 1 1 1 * *' 2016年的1月1日1點1分30秒觸發(fā) :'30 1 1 1 2016 *' 每周1的1點1分30秒觸發(fā) :'30 1 1 * * 1'
這里是個人對node-schedule封裝類來使用增刪改查定時任務
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實例
// 定時任務 new Util.Interval({ unit_name: '自動分發(fā)任務 0 0 12 * * *', maintain_time: '0 0 12 * * *', last_alarm: '自動分發(fā)任務 0 0 12 * * *' }).create(async () => { // 寫入你自己想在定時任務觸發(fā)的時候,想要執(zhí)行的函數(shù) })