溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js中怎么利用node-cron來調度任務

發(fā)布時間:2021-08-25 10:48:27 來源:億速云 閱讀:148 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關Node.js中怎么利用node-cron來調度任務的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

沒有一個開發(fā)人員愿意把所有時間都花在繁瑣的任務上,比如系統(tǒng)維護和管理、日常數(shù)據(jù)庫備份以及定期下載文件和電子郵件。你更愿意專注于富有成效的工作,而不是跟蹤這些煩人的瑣事何時需要完成。

這時就需要使用到任務調度,它將幫助您解決這樣的問題。

任務調度使您能夠計劃任意代碼(方法/函數(shù))和命令在固定日期和時間、重復間隔或指定間隔后執(zhí)行一次。在 Linux 操作系統(tǒng)中,任務調度通常由諸如 cron 之類的實用程序服務在操作系統(tǒng)級別處理。

在 Node.js 應用程序中,類似于 cron 的功能,我們可以使用 node-cron 這樣的包實現(xiàn)。正如開發(fā)者所介紹的,node-cron 是基于 GNU crontab 的 node.js 純 JavaScript 中的微型任務調度器。

crontab 是 Linux 系統(tǒng)的定時任務執(zhí)行器。cron 的操作由 crontab 文件驅動,該文件是一個配置文件,其中包含對 cron 守護程序的指令。node-cron 模塊允許我們使用完整的 crontab 語法在 Node 中調度任務。

推薦工具

crontab 編輯器:在線工具可以可視化生成 crontab 的配置文件。

crontab 語法如下所示:

 # ┌────────────── second (可選)
 # │ ┌──────────── 分鐘 (minute,0 - 59)
 # │ │ ┌────────── 小時 (hour,0 - 23)
 # │ │ │ ┌──────── 一個月中的第幾天 (day of month,1 - 31)
 # │ │ │ │ ┌────── 月份 (month,1 - 12)
 # │ │ │ │ │ ┌──── 星期中星期幾 (day of week,0 - 6) 注意:星期天為 0
 # │ │ │ │ │ │
 # │ │ │ │ │ │
 # * * * * * *

允許的 cron 值包括以下內容。

字段
second0–59
minute0–59
hour0–23
day of the month1–31
month1–12(或月份簡寫 Jan、Feb...)
day of the week0–7(或 Jan、Feb...,0 或 7 是星期日)

下面我們來看看它的一些用法和用例。

使用 node-cron

使用 npm 安裝 node-cron 模塊。

$ npm install --save node-cron

任務調度語法

cron.schedule(cronExpression: string, task: Function, options: Object)

選項

  • scheduled:一個布爾值(boolean),用于設置創(chuàng)建的任務是否已安排(默認值為 true)。

  • timezone:用于任務調度的時區(qū)。有關有效值,可參考 moment-timezone。

看看下面的例子。

const cron = require('node-cron')

cron.schedule('5 * * * * *', () => {
  console.log('每分鐘在第 5 秒運行一個任務')
})

時間規(guī)范的位置 2、3、4、5 和 6 中的星號(*)類似于用于時間劃分的文件 glob 或通配符;它們分別指定每分鐘每小時、每月的每一天每月和每周的每一天。

以下代碼將在每天凌晨 5:30 運行。

const cron = require('node-cron')

cron.schedule('30 5 * * *', () => {
  console.log('每天凌晨 5:30 運行任務')
})

任務調度提示和技巧

現(xiàn)在我們已經了解了基本知識,讓我們做一些更有趣的事情。

假設您希望在每周五下午 4 點運行一項特定任務。代碼如下所示:

const cron = require('node-cron')

cron.schedule('0 16 * * friday', () => {
  console.log('每周五下午 4:00 運行任務')
})

或者,您可能需要每季度運行一次數(shù)據(jù)庫備份。crontab 語法沒有一個月的最后一天選項,因此您可以使用下個月的第一天,如下所示。

const cron = require('node-cron')

cron.schedule('2 3 1 1,4,7,10 *', () => {
  console.log('在每個季度的第一天運行任務')
})

下面顯示的任務在上午 10:05 到下午 6:05 之間每小時運行五分鐘。

const cron = require('node-cron')

cron.schedule('5 10-18 * * *', () => {
  console.log('在上午 10 點到下午 6 點之間每小時運行五分鐘的任務')
})

在某些情況下,您可能需要每兩小時、三小時或四小時運行一次任務。您可以通過將小時數(shù)除以所需的時間間隔來完成此操作,例如,每四小時 *4,或在上午 12 點到下午 12 點之間每三小時運行 0-12/3

分鐘也可以用同樣的方法劃分。例如,minutes 位置的表達式為 */10,表示每10分鐘運行一次任務。

下面的任務在上午 8 點到下午 5:58 之間每兩小時運行五分鐘。

const cron = require('node-cron')

cron.schedule('*/5 8-18/2 * * *', () => {
  console.log('在上午 8 點到下午 5:58 之間每兩小時運行一次任務。')
})

定時任務方法

在結束之前,讓我們關注一下三個關鍵的定時任務方法。

開始任務

scheduled 選項值設置為 false 時,任務將被調度,但無法啟動,即使 cron 表達式正在滴答作響。

要啟動這樣的任務,您需要調用 start 方法。

const cron = require('node-cron')const task = cron.schedule('*/5 8-18/2 * * *', () => {
  console.log('在上午 8 點到下午 5:58 之間每兩小時運行一次任務。')
})

task.start()

停止任務

如果需要停止任務運行,可以使用 stop 方法將 scheduled 選項設置為 false。除非重新啟動,否則不會執(zhí)行該任務。

const cron = require('node-cron')const task = cron.schedule('*/5 8-18/2 * * *', () => {
  console.log('在上午 8 點到下午 5:58 之間每兩小時運行一次任務。')
})

task.stop()

銷毀任務

destroy 方法停止任務并將其完全銷毀。

const cron = require('node-cron')const task = cron.schedule('*/5 8-18/2 * * *', () => {
  console.log('在上午 8 點到下午 5:58 之間每兩小時運行一次任務。')
})

task.destroy()

以上便是 node-cron 的大部分功能,您應該使用這些功能來安排頻繁運行的任務。

感謝各位的閱讀!關于“Node.js中怎么利用node-cron來調度任務”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI