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/n/136258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
DNLYDNLY
上一篇 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

发表回复

登录后才能评论