node-schedule定時器


--

node-schedule是一個計時器插件,它適用於做這些任務:

每分鍾的第幾秒鍾,執行一個任務

每小時的第幾分鍾,執行一個任務

每天的第幾個小時,執行一個任務

每月的第幾天,執行一個任務

每周的第幾天,執行一個任務

如果要做固定間隔執行一個任務(固定間隔的任務),沒必要用這個插件;

官網:https://www.npmjs.com/package/node-schedule

安裝: 

npm install node-schedule

例子:

const schedule = require('node-schedule')
// 每小時的 第42分鍾 執行一個任務 注意是5個星號(最多可有6個星號,從左到右分別代表:秒(0-59)、分(0-59)、時(0-23)、天(1-31)、月(1-12)、星期幾(0-7 0和7代表周日))
const job = schedule.scheduleJob('42 * * * *', function(){
  console.log('The answer to life, the universe, and everything!');
});

-

 

 每秒和每分鍾執行一次

// 每秒執行一次
const job = schedule.scheduleJob('*/1 * * * * *', function(){
  // do some
});
// 每分鍾執行一次
const job = schedule.scheduleJob('*/1 * * * *', function(){
  // do some
});

-

// 每小時的第2分鍾的第1秒執行一次
const job = schedule.scheduleJob('1 2 * * * *', function(){
  // do some
});

指定一個日期執行

// 2022-1-25 20:56執行一次
const date = new Date(2022, 0, 25, 20, 56, 0);

const job = schedule.scheduleJob(date, function(){
  // do some
});

在將來使用當前數據:

const date = new Date(2022, 0, 25, 21, 4, 0);
let x = 1;
const job = schedule.scheduleJob(date, function(y){
  // do some
  console.log(y); // 1
}.bind(null,x));
x = 2

用自定義規則來執行任務:

// 每分鍾的第1秒執行一次
const rule = new schedule.RecurrenceRule();
rule.second = 1;

const job = schedule.scheduleJob(rule, function(){
  // do some
});

-

// 在每周4/5/6 的17時0分執行一次
const rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0, new schedule.Range(4, 6)];
rule.hour = 17;
rule.minute = 0;

const job = schedule.scheduleJob(rule, function(){
  // do some
});

支持時區:

// 用UTC時間
const rule = new schedule.RecurrenceRule();
rule.hour = 0;
rule.tz = 'Etc/UTC';

const job = schedule.scheduleJob(rule, function(){
  // do some
});

RecurrenceRule屬性:

  • second (0-59)
  • minute (0-59)
  • hour (0-23)
  • date (1-31)
  • month (0-11)
  • year
  • dayOfWeek (0-6) Starting with Sunday
  • tz

 支持對象字面量規則:

// 每周日下午2點半 執行一次
const job = schedule.scheduleJob({hour: 14, minute: 30, dayOfWeek: 0}, function(){
  // do some
});

支持開始時間和結束時間:

// 延遲5s后開始,10s后結束
const startTime = new Date(Date.now() + 5000);
const endTime = new Date(startTime.getTime() + 5000);
const job = schedule.scheduleJob({ start: startTime, end: endTime, rule: '*/1 * * * * *' }, function(){
  // do some
});

優雅(等待所有的工作被終止)的關閉任務,返回promise:

schedule.gracefulShutdown();

系統中斷時,優雅的關閉作業

process.on('SIGINT', function () { 
  schedule.gracefulShutdown()
  .then(() => process.exit(0))
}

取消某個作業:

j.cancel();

 

--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM