iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
自我挑戰組

後端工程師自我練習,使用Node.js來做後端server系列 第 12

[Day-12] Node.js [定時排程任務套件node-schedule介紹]

  • 分享至 

  • xImage
  •  

[ Day 12]

說明:
在server服務中,很常需要做到定時排程這樣的任務,例如:每天晚上10點將資料送給a公司的file server,每天凌晨2點產生報表之類的需求。
雖然在js的世界中有setInterval這樣好用的function存在,但是它比較傾向於用來每隔X秒執行程式,而ㄋ要指定日期的話,使用node-schedule這類的排程器較為方便。(與java quartz, linux crontab相似)

一、安裝node-schedule

npm i node-schedule --save

二、使用crontab表示式執行

const schedule  = require('node-schedule')

var taskFreq = '*/1 * * * *'

var sche = schedule.scheduleJob(taskFreq, () => {
  console.log('now is :' + new Date)
})

透過scheduleJob這個方法,傳入要執行的時間(共5個*號,同linux crontab,最小單位為分鐘),
執行後方callback function。這裡以每分鐘印出現在時間為範例。
https://ithelp.ithome.com.tw/upload/images/20200925/201109119y34AZ8SdD.png

三、傳入確切時間執行

var execDate = new Date(2020,8,24,17,6,30)

var sche = schedule.scheduleJob(execDate, () => {
  console.log('now is :' + new Date)
})

另外呢,也可以透過指定特定時間執行,需要傳入date物件。
要注意的是,月份必須-1才是當月月份(月份從0開始)
https://ithelp.ithome.com.tw/upload/images/20200925/20110911t9L8xoybFd.png

四、終止任務

var taskFreq = '*/1 * * * *'

var count = 0

var sche = schedule.scheduleJob(execDate, () => {
  console.log('now is :' + new Date)
  count += 1
  if(count > 1) {
    sche.cancel();
    console.log('任務終止')
  }
})

呼叫cancel方法可以停止該任務,這裡示範每分鐘執行1次,當執行兩次後停止任務。
https://ithelp.ithome.com.tw/upload/images/20200925/20110911tqJ7cHlqMK.png

[Day12結束]


上一篇
[Day-11] Node.js [使用Ejs建立server render頁面]
下一篇
[Day-13] Node.js [lodash套件,增加開發速度]
系列文
後端工程師自我練習,使用Node.js來做後端server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
Tree
iT邦新手 3 級 ‧ 2020-09-25 18:59:03

later.js 也不錯用 /images/emoticon/emoticon12.gif

它可以 Text Parser

// fires at 10:15am every day
var text1 = later.parse.text('at 10:15 am');

// fires every 5 minutes every day
var text2 = later.parse.text('every 5 mins');

感謝,有空來研究下差異

我要留言

立即登入留言