首頁  >  文章  >  web前端  >  node專案中怎麼使用Node Schedule建立定時任務

node專案中怎麼使用Node Schedule建立定時任務

青灯夜游
青灯夜游轉載
2021-11-17 18:33:163424瀏覽

node專案中怎麼建立定時任務?以下這篇文章為大家介紹一下在node專案中怎麼使用Node Schedule制定定時任務腳本,希望對大家有幫助!

node專案中怎麼使用Node Schedule建立定時任務

nodejs的後端也是需要定時任務做處理,例如備份,定時發送郵件,結算等操作,所以使用了Node Schedule這個npm幫助我們制定定時任務腳本。

npm install node-schedule

Node Schedule 中的每個定時任務都由一個Job物件表示。可以手動創建,然後執行schedule()方法以應用任務,或使用scheduleJob()如下。

Job物件是`EventEmitter,並發出以下事件:

  • run每次執行後的事件。
  • scheduled每次計畫執行時的事件。
  • canceled,當它在執行之前呼叫被取消的事件。
  • 一個error當被觸發調度作業呼叫拋出或退出事件拒絕Promise

scheduledcanceled事件都會接收一個 JavaScript 日期物件作為參數)。 注意的是,任務是第一次立即執行的,因此如果使用scheduleJob()方法建立任務,將錯過第一個scheduled 事件觸發,但您可以手動查詢調用。

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秒触发: '30 * * * * *'

每小时的1分30秒触发 :'30 1 * * * *'

每天的凌晨1点1分30秒触发 :'30 1 1 * * *'

每月的1日1点1分30秒触发 :'30 1 1 1 * *'

2016年的1月1日1点1分30秒触发 :'30 1 1 1 2016 *'

每周1的1点1分30秒触发 :'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: '自动分发任务 0 0 12 * * *',
  maintain_time: '0 0 12 * * *',
  last_alarm: '自动分发任务 0 0 12 * * *'
}).create(async () => {
  // 写入你自己想在定时任务触发的时候,想要执行的函数
})

更多node相關知識,請造訪:nodejs 教學! !

以上是node專案中怎麼使用Node Schedule建立定時任務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除