--
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)yeardayOfWeek (0-6) Starting with Sundaytz
支持對象字面量規則:
// 每周日下午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();
--
