NodeSchedule:定期執行任務的完美方案

一、NodeSchedule 是什麼

NodeSchedule 是一個基於 Node.js 平台的第三方定時任務工具。它可以實現多種執行方式的定時任務,例如每隔一段時間執行一次、每天固定時間執行、每周固定時間執行、每月固定時間執行等。使用 NodeSchedule 可以非常方便地實現定時向用戶發送郵件、生成每日報告、備份數據、添加定時任務等功能。

NodeSchedule 受啟發於 UNIX 操作系統的 crontab。因此,你可以在不同的時區,基於不同的時間單位,非常方便地編寫你自己的任務計劃。

二、NodeSchedule 的安裝和使用

NodeSchedule 可以通過 npm 包管理器進行安裝,這是非常簡單的。

npm install node-schedule

下面是一段簡單的使用 NodeSchedule 的代碼:

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

const task = schedule.scheduleJob('30 * * * * *', () => {
  console.log('每分鐘的第 30 秒觸發');
});
// 取消定時任務
task.cancel();

這段代碼在每分鐘的第 30 秒觸發任務輸出信息。當你想要取消定時任務時,只需調用 job.cancel() 方法即可取消任務。

三、NodeSchedule 完整的時間規則表達式

使用 NodeSchedule 的核心是使用時間規則表達式。下面是一個完整的時間規則表達式:

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of the week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of the month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

表格中的每個星號可以被替換為具體的數字,下面是一些示例:

  • * * * * * *:每秒觸發一次(非標準語法)
  • 0 * * * * *:每分鐘的開始時刻觸發
  • */10 * * * * *:每分鐘內每隔 10 秒觸發一次
  • 30 3 * * * *:每天的凌晨三點半觸發
  • 0 0 * * * *:每天的零點觸發
  • 0 0 10 * * *:每天的 10 點觸發
  • 0 0 10 * * 1:每周一的 10 點觸發
  • 0 0 10 15 * *:每個月 15 號的 10 點觸發
  • 0 0 10 15 1 *:每年 1 月 15 號的 10 點觸發

四、NodeSchedule 的進階應用

下面是一些 NodeSchedule 的高級用法:

1. 在指定時間觸發一次

下面的代碼指定了在 2019 年 9 月 18 日的下午 4 點鐘觸發一次任務。

const date = new Date(2019, 8, 18, 16, 0, 0);
const task = schedule.scheduleJob(date, () => {
  console.log('今天是我的生日');
});

2. 取消任務

你可以使用 job.cancel() 方法取消一個任務。下面的代碼定義了一個任務,並在 1 分鐘後取消這個任務。

const task = schedule.scheduleJob('*/1 * * * *', () => {
  console.log('每分鐘觸發一次');
});
setTimeout(() => {
  task.cancel();
}, 60000);

3. 每周五和周六 18 點觸發任務

下面的代碼定義了一個每周五和周六 18 點鐘觸發的任務。

let rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [5, 6];
rule.hour = 18;
rule.minute = 0;
const task = schedule.scheduleJob(rule, () => {
  console.log('周末快樂');
});

4. 將任務存儲到數組中依次執行

下面的代碼定義了一個任務數組,存儲 3 個任務。通過數組的遍歷,循環執行每一個任務。

const tasks = [
  {
    time: '*/5 * * * *',
    action: () => {
      console.log('每 5 分鐘觸發一次');
    }
  },
  {
    time: '* * 2 * * *',
    action: () => {
      console.log('每月第二天執行');
    }
  },
  {
    time: '* 30 11 * * 2,4,6',
    action: () => {
      console.log('每周二、周四、周六的 11 點 30 觸發');
    }
  }
];
tasks.forEach(task => {
  schedule.scheduleJob(task.time, task.action);
});

五、結語

NodeSchedule 提供了非常簡單的方式來實現定時任務。通過對時間規則表達式的理解和使用,你可以很方便地實現各種場景下的定時任務。此外,NodeSchedule 還提供了一些進階使用和高級特性,使得它可以適應更為複雜的需求。

原創文章,作者:DNLY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136258.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DNLY的頭像DNLY
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相關推薦

  • KeyDB Java:完美的分散式高速緩存方案

    本文將從以下幾個方面對KeyDB Java進行詳細闡述:KeyDB Java的特點、安裝和配置、使用示例、性能測試。 一、KeyDB Java的特點 KeyDB Java是KeyD…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Saturn 定時任務用法介紹

    本文將從以下幾個方面對Saturn定時任務進行詳細的闡述: 一、Saturn 定時任務簡介 Saturn是一個分散式任務調度系統,支持在線添加、修改定時任務,支持多種任務類型,如J…

    編程 2025-04-29
  • 如何在dolphinscheduler中運行chunjun任務實例

    本文將從多個方面對dolphinscheduler運行chunjun任務實例進行詳細的闡述,包括準備工作、chunjun任務配置、運行結果等方面。 一、準備工作 在運行chunju…

    編程 2025-04-28
  • Python性能優化方案

    本文將從多個方面介紹Python性能優化方案,並提供相應的示例代碼。 一、使用Cython擴展 Cython是一個Python編譯器,可以將Python代碼轉化為C代碼,可顯著提高…

    編程 2025-04-28
  • NB設備上傳數據方案

    NB(Narrow Band)是一種物聯網通信技術,可以實現低功耗、寬覆蓋、多連接等特點。本文旨在探討如何使用NB設備上傳數據。在這篇文章中,我們將介紹NB設備上傳數據的基本原理、…

    編程 2025-04-27
  • 周杰倫的花海:音樂與自然的完美融合

    周杰倫的花海,是指由周杰倫私人投資興建、位於上海市奉賢區四團鎮李家漕村的一個純生態主題公園。該公園以親近自然、體驗自然為主,植被種類豐富、景色宜人,是市區人們放鬆身心、回歸自然的好…

    編程 2025-04-27
  • Android和Vue3混合開發方案

    本文將介紹如何將Android和Vue3結合起來進行混合開發,以及其中的優勢和注意事項。 一、環境搭建 在進行混合開發之前,需要搭建好相應的開發環境。首先需要安裝 Android …

    編程 2025-04-27
  • Rappor——谷歌推出的安全數據收集方案

    Rappor是一種隱私保護技術,可以在保持用戶私密信息的前提下,收集用戶的隨機信號數據。它可以用於應對廣泛的數據收集需求,讓用戶在參與數據收集的過程中感到安全和安心。 一、Rapp…

    編程 2025-04-27

發表回復

登錄後才能評論