NodeJS定時任務 注:2023-4-28更新

 

使用的node-schedule 設置定時任務

 

引入

const schedule = require('node-schedule');

 

參數解析

schedule.scheduleJob(* * * * * *)

接收六個參數,位置分別如下,如果不需要,填 * 號即可,* 代表通配符

6個佔位符從左到右分別代表:秒、分、時、日、月、周幾

*表示通配符,匹配任意,當秒是*時,表示任意秒數都觸發,其它類推

*  *  *  *  *  *
┬  ┬  ┬  ┬  ┬  ┬

│  │  │  │  │  |

│  │  │  │  │  └ [dayOfWeek]day of week (0 - 7) (0 or 7 is Sun)

│  │  │  │  └───── [month]month (1 - 12)

│  │  │  └────────── [date]day of month (1 - 31)

│  │  └─────────────── [hour]hour (0 - 23)

│  └──────────────────── [minute]minute (0 - 59)

└───────────────────────── [second]second (0 - 59, OPTIONAL)

 

舉例:

每分鐘的第30秒,執行

schedule.scheduleJob('30 * * * * *', async () => {
  console.log("執行輪查任務")      
})

// 每分鐘的第30秒觸發: '30 * * * * *'
// 每小時的1分30秒觸發 :'30 1 * * * *'
// 每天的凌晨1點1分30秒觸發 :'30 1 1 * * *'
// 每月的1日1點1分30秒觸發 :'30 1 1 1 * *'
// 2020年的1月1日1點1分30秒觸發 :'30 1 1 1 2020 *'
// 每週1的1點1分30秒觸發 :'30 1 1 * * 1'

每個參數還可以傳入數值範圍

const task1 = ()=>{
  //每分鐘的1-10秒都會觸發,其它通配符依次類推
  schedule.scheduleJob('1-10 * * * * *', ()=>{
    console.log('scheduleCronstyle:'+ new Date());
  })
}
task1()

 

 取消任務 (聲明一個變量接收定時任務。執行 cancel() 即可)

const task = schedule.scheduleJob('1-10 * * * * *', ()=>{
   console.log('scheduleCronstyle:'+ new Date());
})
task.cancel()

  

 

 

不同環境下的列子

  • rule 規則 : 指定時間間隔執行方法
let rule = new schedule.RecurrenceRule();
rule.second = 10;
let Maturity = schedule.scheduleJob(rule, function(){
  console.log('現在時間:',new Date());
});

 

這是每當秒數爲10時打印時間。如果想每隔10秒執行,設置 rule.second =[0,10,20,30,40,50]即可。

每天0點執行就是rule.hour =0; rule.minute =0; rule.second =0;

每月1號的10點就是rule.date =1;rule.hour =10;rule.minute =0;rule.second =0;

每週1,3,5的0點和12點就是rule.dayOfWeek =[1,3,5]; rule.hour =[0,12]; rule.minute =0; rule.second =0;

 

 

 

  • 對象風格
const schedule = require('node-schedule');
function scheduleObjectLiteralSyntax(){
    //dayOfWeek
    //month
    //dayOfMonth
    //hour
    //minute
    //second
      //每週一的下午16:11分觸發,其它組合可以根據我代碼中的註釋參數名自由組合
    schedule.scheduleJob({hour: 16, minute: 11, dayOfWeek: 1}, function(){
        console.log('scheduleObjectLiteralSyntax:' + new Date());
    });
}
scheduleObjectLiteralSyntax();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章