站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

Node.js中如何利用node-cron來(lái)調(diào)度任務(wù)?

Node.js中如何利用node-cron來(lái)調(diào)度任務(wù)?

沒(méi)有一個(gè)開(kāi)發(fā)人員愿意把所有時(shí)間都花在繁瑣的任務(wù)上,比如系統(tǒng)維護(hù)和管理、日常數(shù)據(jù)庫(kù)備份以及定期下載文件和電子郵件。你更愿意專注于富有成效的工作,而不是跟蹤這些煩人的瑣事何時(shí)需要完成。【推薦學(xué)習(xí):《nodejs 教程》】

這時(shí)就需要使用到任務(wù)調(diào)度,它將幫助您解決這樣的問(wèn)題。

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

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

crontab 是 Linux 系統(tǒng)的定時(shí)任務(wù)執(zhí)行器。cron 的操作由 crontab 文件驅(qū)動(dòng),該文件是一個(gè)配置文件,其中包含對(duì) cron 守護(hù)程序的指令。node-cron 模塊允許我們使用完整的 crontab 語(yǔ)法在 Node 中調(diào)度任務(wù)。

推薦工具

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

crontab 語(yǔ)法如下所示:

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

允許的 cron 值包括以下內(nèi)容。

字段
second 0–59
minute 0–59
hour 0–23
day of the month 1–31
month 1–12(或月份簡(jiǎn)寫(xiě) Jan、Feb…)
day of the week 0–7(或 Jan、Feb…,0 或 7 是星期日)

下面我們來(lái)看看它的一些用法和用例。

使用 node-cron

使用 npm 安裝 node-cron 模塊。

$ npm install --save node-cron

任務(wù)調(diào)度語(yǔ)法

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

選項(xiàng)

  • scheduled:一個(gè)布爾值(boolean),用于設(shè)置創(chuàng)建的任務(wù)是否已安排(默認(rèn)值為 true)。
  • timezone:用于任務(wù)調(diào)度的時(shí)區(qū)。有關(guān)有效值,可參考 moment-timezone。

看看下面的例子。

const cron = require('node-cron')  cron.schedule('5 * * * * *', () => {   console.log('每分鐘在第 5 秒運(yùn)行一個(gè)任務(wù)') })

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

以下代碼將在每天凌晨 5:30 運(yùn)行。

const cron = require('node-cron')  cron.schedule('30 5 * * *', () => {   console.log('每天凌晨 5:30 運(yùn)行任務(wù)') })

任務(wù)調(diào)度提示和技巧

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

假設(shè)您希望在每周五下午 4 點(diǎn)運(yùn)行一項(xiàng)特定任務(wù)。代碼如下所示:

const cron = require('node-cron')  cron.schedule('0 16 * * friday', () => {   console.log('每周五下午 4:00 運(yùn)行任務(wù)') })

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

const cron = require('node-cron')  cron.schedule('2 3 1 1,4,7,10 *', () => {   console.log('在每個(gè)季度的第一天運(yùn)行任務(wù)') })

下面顯示的任務(wù)在上午 10:05 到下午 6:05 之間每小時(shí)運(yùn)行五分鐘。

const cron = require('node-cron')  cron.schedule('5 10-18 * * *', () => {   console.log('在上午 10 點(diǎn)到下午 6 點(diǎn)之間每小時(shí)運(yùn)行五分鐘的任務(wù)') })

在某些情況下,您可能需要每?jī)尚r(shí)、三小時(shí)或四小時(shí)運(yùn)行一次任務(wù)。您可以通過(guò)將小時(shí)數(shù)除以所需的時(shí)間間隔來(lái)完成此操作,例如,每四小時(shí) *4,或在上午 12 點(diǎn)到下午 12 點(diǎn)之間每三小時(shí)運(yùn)行 0-12/3

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

下面的任務(wù)在上午 8 點(diǎn)到下午 5:58 之間每?jī)尚r(shí)運(yùn)行五分鐘。

const cron = require('node-cron')  cron.schedule('*/5 8-18/2 * * *', () => {   console.log('在上午 8 點(diǎn)到下午 5:58 之間每?jī)尚r(shí)運(yùn)行一次任務(wù)。') })

定時(shí)任務(wù)方法

在結(jié)束之前,讓我們關(guān)注一下三個(gè)關(guān)鍵的定時(shí)任務(wù)方法。

開(kāi)始任務(wù)

scheduled 選項(xiàng)值設(shè)置為 false 時(shí),任務(wù)將被調(diào)度,但無(wú)法啟動(dòng),即使 cron 表達(dá)式正在滴答作響。

要啟動(dòng)這樣的任務(wù),您需要調(diào)用 start 方法。

const cron = require('node-cron')const task = cron.schedule('*/5 8-18/2 * * *', () => {   console.log('在上午 8 點(diǎn)到下午 5:58 之間每?jī)尚r(shí)運(yùn)行一次任務(wù)。') })  task.start()

停止任務(wù)

如果需要停止任務(wù)運(yùn)行,可以使用 stop 方法將 scheduled 選項(xiàng)設(shè)置為 false。除非重新啟動(dòng),否則不會(huì)執(zhí)行該任務(wù)。

const cron = require('node-cron')const task = cron.schedule('*/5 8-18/2 * * *', () => {   console.log('在上午 8 點(diǎn)到下午 5:58 之間每?jī)尚r(shí)運(yùn)行一次任務(wù)。') })  task.stop()

銷毀任務(wù)

destroy 方法停止任務(wù)并將其完全銷毀。

const cron = require('node-cron')const task = cron.schedule('*/5 8-18/2 * * *', () => {   console.log('在上午 8 點(diǎn)到下午 5:58 之間每?jī)尚r(shí)運(yùn)行一次任務(wù)。') })  task.destroy()

以上便是 node-cron 的大部分功能,您應(yīng)該使用這些功能來(lái)安排頻繁運(yùn)行的任務(wù)。

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
国产自啪精品视频网站丝袜| 亚洲精品无码日韩国产不卡?V| 91一区二区在线观看精品| 国精品无码一区二区三区在线蜜臀| 无码乱码观看精品久久| 中文字幕日韩精品有码视频| 成人精品国产亚洲欧洲| 国产成人精品一区二区A片带套| 最新国产成人亚洲精品影院| 亚洲国产精品日韩在线观看| 日产精品一线二线三线芒果| 久久精品99视频| 亚洲国产精品特色大片观看完整版| 国产香蕉国产精品偷在线| 国产成人精品久久| 亚洲国产精品不卡毛片a在线| 日韩一区在线视频| 日韩免费高清一级毛片在线| 日韩人妻一区二区三区蜜桃视频| 国产成人福利精品视频| 国产精品国产三级国产av剧情 | 亚洲色精品VR一区区三区| 久久精品国产99久久久古代| 97久久精品国产成人影院| 精品无码人妻一区二区三区 | 日韩毛片一级好特黄| 日韩毛片免费一二三| 日韩精品一二三区| 国产日韩一区二区三区在线观看| 四虎永久在线精品影院| 日韩免费在线视频| 精品96在线观看影院| 亚洲国产成人精品女人久久久| 国产精品女同一区二区久久 | 国产啪精品视频网免费 | 亚洲精品国产精品乱码不卞| 亚洲国产精品自在拍在线播放| 高清在线亚洲精品国产二区| 国产精品日韩深夜福利久久| 精品国产香蕉伊思人在线在线亚洲一区二区| 国产精品污WWW一区二区三区|