欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js基于node-schedule實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟

 更新時(shí)間:2024年09月02日 09:59:42   作者:鄒榮樂  
實(shí)際工作中,可能會(huì)遇到定時(shí)清除某個(gè)文件夾內(nèi)容,定時(shí)發(fā)送消息或發(fā)送郵件給指定用戶,定時(shí)導(dǎo)出某些數(shù)據(jù)等,node-schedule是一個(gè)非常不錯(cuò)的npm包,可以幫助我們快速的創(chuàng)建和管理定時(shí)任務(wù),所以本文介紹了Node.js基于node-schedule實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟,需要的朋友可以參考下

一、定時(shí)任務(wù)

實(shí)際工作中,可能會(huì)遇到定時(shí)清除某個(gè)文件夾內(nèi)容,定時(shí)發(fā)送消息或發(fā)送郵件給指定用戶,定時(shí)導(dǎo)出某些數(shù)據(jù)等。借助setTimeout和setInterval來實(shí)現(xiàn)的化太過麻煩,node-schedule是一個(gè)非常不錯(cuò)的npm包,可以幫助我們快速的創(chuàng)建和管理定時(shí)任務(wù)。

定時(shí)任務(wù)是指在預(yù)定的時(shí)間點(diǎn)或時(shí)間間隔內(nèi)執(zhí)行的任務(wù)或操作。它們是自動(dòng)化執(zhí)行特定邏輯的一種方式,可用于執(zhí)行重復(fù)性的、周期性的或計(jì)劃性的任務(wù)。

定時(shí)任務(wù)通常用于以下情況:

  • 數(shù)據(jù)管理與備份:定時(shí)任務(wù)可以用于定期備份數(shù)據(jù)庫(kù)中的數(shù)據(jù),確保數(shù)據(jù)的安全性和可靠性。此外,還可以用于多個(gè)數(shù)據(jù)源之間的數(shù)據(jù)同步,保證數(shù)據(jù)的一致性。

  • 系統(tǒng)監(jiān)控與維護(hù):定時(shí)任務(wù)可以用于監(jiān)控系統(tǒng)中的各種指標(biāo)和狀態(tài),如服務(wù)器負(fù)載、數(shù)據(jù)庫(kù)連接池的使用情況等,及時(shí)發(fā)現(xiàn)并解決潛在的問題。同時(shí),也可以用于定期刷新緩存,保證緩存數(shù)據(jù)的及時(shí)性和準(zhǔn)確性。

  • 執(zhí)行定時(shí)任務(wù):定時(shí)器可以用于在預(yù)定的時(shí)間間隔內(nèi)執(zhí)行特定的任務(wù)或代碼塊,例如數(shù)據(jù)備份、日志清理、緩存刷新等操作。

  • 定時(shí)提醒和通知:定時(shí)器可以用于實(shí)現(xiàn)定時(shí)提醒和通知功能,如鬧鐘、定時(shí)器應(yīng)用等,通過設(shè)置定時(shí)器,在指定的時(shí)間點(diǎn)觸發(fā)提醒或通知,幫助用戶記住重要事件或完成特定任務(wù)。

  • 自動(dòng)保存和自動(dòng)提交:定時(shí)器可以用于自動(dòng)保存或自動(dòng)提交表單數(shù)據(jù),通過設(shè)置定時(shí)器,在一定的時(shí)間間隔內(nèi)自動(dòng)將用戶輸入的數(shù)據(jù)保存到服務(wù)器或數(shù)據(jù)庫(kù),避免數(shù)據(jù)丟失或用戶忘記保存的情況。

  • 定時(shí)刷新頁(yè)面內(nèi)容:定時(shí)器可以用于定時(shí)刷新頁(yè)面的特定部分或整個(gè)頁(yè)面,通過設(shè)置定時(shí)器,在一定的時(shí)間間隔內(nèi)更新頁(yè)面內(nèi)容,如實(shí)時(shí)展示新聞、股票行情等。

  • 會(huì)話管理與心跳檢測(cè):在Web應(yīng)用中,定時(shí)器可以用來檢查并清理長(zhǎng)時(shí)間未活動(dòng)的用戶會(huì)話,以及客戶端和服務(wù)端之間利用定時(shí)器發(fā)送心跳包來維持長(zhǎng)連接,及時(shí)發(fā)現(xiàn)連接異常。

  • 延遲執(zhí)行與調(diào)度任務(wù):定時(shí)器可以用于延遲發(fā)送消息或在非高峰時(shí)段執(zhí)行批處理作業(yè),減輕服務(wù)器負(fù)載。

二、node-schedule、

1、安裝

npm install node-schedule

2、引入

CommonJS:

const schedule = require('node-schedule');

ES模塊

import schedule from 'node-schedule'

3、基于Cron表達(dá)式的規(guī)則

Cron表達(dá)式是一種用于指定定時(shí)任務(wù)執(zhí)行時(shí)間的字符串表示形式。它由6個(gè)字段組成,每個(gè)字段表示任務(wù)執(zhí)行的時(shí)間單位和范圍。

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ 星期幾(0 - 7) (0相對(duì)于周日) 
│    │    │    │    └───── 月 (1 - 12)
│    │    │    └────────── 日 (1 - 31)
│    │    └─────────────── 時(shí) (0 - 23)
│    └──────────────────── 分 (0 - 59)
└───────────────────────── 秒 (0 - 59)

每個(gè)字段可以接受特定的數(shù)值、范圍、通配符和特殊字符來指定任務(wù)的執(zhí)行時(shí)間:

  • 數(shù)值:表示具體的時(shí)間單位,如1、2、10等。
  • 范圍:使用-連接起始和結(jié)束的數(shù)值,表示一個(gè)范圍內(nèi)的所有值,如1-5表示1到5的所有數(shù)值。
  • 通配符:使用表示匹配該字段的所有可能值,如表示每分鐘、每小時(shí)、每天等。
  • 逗號(hào)分隔:使用逗號(hào)分隔多個(gè)數(shù)值或范圍,表示匹配其中任意一個(gè)值,如1,3表示1或3。
  • 步長(zhǎng):使用/表示步長(zhǎng),用于指定間隔的數(shù)值,如*/5表示每隔5個(gè)單位執(zhí)行一次。
  • 特殊字符:Cron表達(dá)式還支持一些特殊字符來表示特定的含義,如?用于替代日和星期字段中的任意值,L表示最后一天,W表示最近的工作日等。

使用cron字符串作為rule時(shí),建議寫完整,可讀性比較好。

以下是一些常見的Cron表達(dá)式示例:

* * * * * *     :每秒執(zhí)行

*/5 * * * * *   :每5秒執(zhí)行

* 30 * * * *    :每30分鐘執(zhí)行

*/10 30 * * * * :每30分鐘的10秒執(zhí)行

2,4,6 * * * * * :每個(gè)2秒,4秒和6秒執(zhí)行

0 0 0 ? * 1     :每周一早上的零點(diǎn)執(zhí)行

* * * 20 * ?    :每月的20日觸發(fā)

4、基于Date的規(guī)則

當(dāng)你需要在具體的時(shí)間執(zhí)行一次,可以使用new Date來定義一個(gè)時(shí)間。

假設(shè)您非常希望在一個(gè)精確到某一個(gè)時(shí)間點(diǎn)上的秒數(shù)的僅觸發(fā)一次的計(jì)劃。

const schedule = require('node-schedule');
//2024年,6月,1日,6時(shí),1分,0秒
//month 范圍是 0~11 而非1~12
const date = new Date(2024, 5, 1, 6, 1, 0);
const job = schedule.scheduleJob(date, ()=>{
  console.log('Happy Children's Day !');
});

5、基于RecurrenceRule的規(guī)則

如果你的任務(wù)是定時(shí)重復(fù)執(zhí)行的,并且你希望有比cron更高的可讀性,你可以嘗試使用RecurrenceRule對(duì)象作為rule。

function Recurrence(year, month, date, dayOfWeek, hour, minute, second, tz)

dayOfWeek 范圍是 0~6
month 范圍是 0~11 而非1~12
如果是連續(xù)的值,node-schedule提供了一個(gè)Range函數(shù)用于創(chuàng)建連續(xù)的元素

  • 每分鐘的15、30、45秒執(zhí)行
const rule = new schedule.RecurrenceRule();
//每個(gè)15、30、45秒執(zhí)行
rule.second = [15, 30, 45];
const job = schedule.scheduleJob(rule, () => {
    console.log(`每次計(jì)劃執(zhí)行的時(shí)間:${new Date().toLocaleString()}`);
});

  • 每分鐘的第10秒
rule.second = 10;

  • 每小時(shí)的第10分鐘
rule.minute = 10;
  • 每周四,周五,周六,周天的17點(diǎn)
rule.dayOfWeek = [0, new schedule.Range(4, 6)];
rule.hour = 17;
rule.minute = 0;

6、API

  • 開啟定時(shí)任務(wù)

需要用到scheduleJob函數(shù),會(huì)返回一個(gè)Job實(shí)例對(duì)象:

function scheduleJob(name: string, rule: ..., callback: function): schedule.Job

參數(shù)

參數(shù)名參數(shù)類型參數(shù)描述
name任務(wù)名,當(dāng)你沒有指定時(shí),它將以時(shí)間戳作為名字。
rule任務(wù)調(diào)度的規(guī)則,支持多種形式的rule:
string - Cron表達(dá)式
number
schedule.RecurrenceRule
Date
callback創(chuàng)建任務(wù)時(shí)的回調(diào)函數(shù)

可以通過scheduleJob(name, rule, callback)或者scheduleJob(rule, callback)創(chuàng)建計(jì)劃。

const rule = '* * * * * *';
const job = schedule.scheduleJob(rule,()=>{});
  • 取消定時(shí)任務(wù)
schedule.cancelJob(id)

7、狀態(tài)監(jiān)聽

import schedule from 'node-schedule';

//設(shè)置規(guī)則
const rule = "*/10 * * * * *"

//設(shè)置任務(wù)
const job = schedule.scheduleJob(rule, () => {
    console.log('2、每次計(jì)劃執(zhí)行中的事件。');
});


job.on("scheduled", () => {
    console.log("1、每次計(jì)劃執(zhí)行前的事件。");
});


job.on("run", () => {
    console.log("3、每次計(jì)劃執(zhí)行后的事件。");
});


job.on("success", () => {
    console.log(`4、每次計(jì)劃執(zhí)行成功事件。`);
});


job.on("error", (err) => {
    console.log(`[error][${new Date().toLocaleString()}]${err.message}`);
});


job.on("canceled", () => {
    console.log("計(jì)劃取消!");
})

到此這篇關(guān)于Node.js基于node-schedule實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟的文章就介紹到這了,更多相關(guān)Node.js node-schedule定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Node.js搭建靜態(tài)資源服務(wù)詳細(xì)教程

    使用Node.js搭建靜態(tài)資源服務(wù)詳細(xì)教程

    這篇文章主要介紹了使用Node.js搭建靜態(tài)資源服務(wù)器,需要的朋友可以參考下
    2017-08-08
  • Nodejs全局安裝和本地安裝的不同之處

    Nodejs全局安裝和本地安裝的不同之處

    這篇文章主要介紹了Nodejs全局安裝和本地安裝的不同之處的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Nodejs處理異常操作示例

    Nodejs處理異常操作示例

    這篇文章主要介紹了Nodejs處理異常操作,結(jié)合實(shí)例形式分析了nodejs針對(duì)異常的捕獲與處理相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • Nodejs從有門道無門菜鳥起飛必看教程

    Nodejs從有門道無門菜鳥起飛必看教程

    下面小編就為大家?guī)硪黄狽odejs從有門道無門菜鳥起飛必看教程。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • Node.js進(jìn)階之核心模塊https入門

    Node.js進(jìn)階之核心模塊https入門

    在nodejs中,提供了 https 這個(gè)模塊來完成 HTTPS 相關(guān)功能。這篇文章主要介紹了Node.js進(jìn)階之核心模塊https入門,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Node.js中環(huán)境變量process.env的一些事詳解

    Node.js中環(huán)境變量process.env的一些事詳解

    這篇文章主要給大家介紹了關(guān)于Node.js中環(huán)境變量process.env的一些事,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 淺談Node.js:理解stream

    淺談Node.js:理解stream

    本篇文章主要介紹了Node.js:stream,Stream在node.js中是一個(gè)抽象的接口,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-12-12
  • 用Nodejs實(shí)現(xiàn)在終端中炒股的實(shí)現(xiàn)

    用Nodejs實(shí)現(xiàn)在終端中炒股的實(shí)現(xiàn)

    這篇文章主要介紹了用Nodejs實(shí)現(xiàn)在終端中炒股的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 一文講解如何把已安裝的nodejs高版本降級(jí)為低版本

    一文講解如何把已安裝的nodejs高版本降級(jí)為低版本

    部分老舊項(xiàng)目需要使用低版本的node,網(wǎng)上很多是無效的,高版本無法直接安裝低版本node,但是低版本nodejs可以安裝部分高版本node,從而達(dá)到升級(jí)效果,下面這篇文章主要給大家介紹了關(guān)于如何把已安裝的nodejs高版本降級(jí)為低版本的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • 優(yōu)化Node.js Web應(yīng)用運(yùn)行速度的10個(gè)技巧

    優(yōu)化Node.js Web應(yīng)用運(yùn)行速度的10個(gè)技巧

    這篇文章主要介紹了優(yōu)化Node.js Web應(yīng)用運(yùn)行速度的10個(gè)技巧,本文講解了從并行、異步、緩存、gzip 壓縮、客戶端渲染等等技巧,需要的朋友可以參考下
    2014-09-09

最新評(píng)論