nodejs 定时任务的执行 node-cron node-schedule

setInterval 内置模块

Node.js 内置了一个定时器模块 setIntervalsetTimeout,可以帮助我们实现简单的定时任务。该方法接受两个参数:要执行的函数和时间间隔。示例代码如下:

// 使用 setTimeout 执行一次函数
setTimeout(() => {
  console.log("这是一个定时任务 - 一次性执行");
}, 1000); // 1秒后执行

// 使用 setInterval 每隔一段时间执行函数
const intervalId = setInterval(() => {
  console.log("这是一个定时任务 - 重复执行");
}, 2000); // 每2秒执行一次

// 清除定时任务
clearInterval(intervalId); // 停止重复执行

可以根据实际业务需要来修改执行的任务内容和时间间隔,从而实现定时任务。

但是,如果我想定义一个每天早上六点执行的任务,那使用 setInterval来实现是一件很痛苦的事情,这里推荐使用第三方库node-schedule,就可以轻松解决,实现各种复杂的任务调动。也可使用第三方库node-cron来解决简单的任务调动。

node-schedule第三方库

模块提供了一种更友好的 API 来设置定时任务,支持多种定时方式

安装

npm install node-schedule --save

使用

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

const rule = new schedule.RecurrenceRule();
rule.hour = 6; // 每天的第6小时执行
rule.minute = 0; // 每天的第0分钟执行

const job = schedule.scheduleJob(rule, () => {
  console.log('每天早上六点执行的任务');
});

参数详解

schedule.scheduleJob('* * * * * *', function(){
});

六个*依次代表 *表示每

  • hour: 一个数字,表示小时(0-23)。
  • minute: 一个数字,表示分钟(0-59)。
  • second: 一个数字,表示秒(0-59)。
  • date: 一个数字,表示日期(1-31)。
  • month: 一个数字,表示月份(0-11,其中 0 代表 1 月)。
  • dayOfWeek: 一个数字,表示一周中的某天(0-6,其中 0 代表星期天)。

例子

  • 每分钟的第30秒触发: 30 * * * * *
  • 每小时的1分30秒触发 :30 1 * * * *
  • 每天的凌晨1点1分30秒触发 :30 1 1 * * *
  • 每月的1日1点1分30秒触发 :30 1 1 1 * *
  • 每年的1月1日1点1分30秒触发 :30 1 1 1 1 *
  • 每周1的1点1分30秒触发 :30 1 1 * * 1

node-cron第三方库

安装

npm install node-cron --save

使用

const cron = require('node-cron');
cron.schedule('0 0 6 * * *', () => {
    console.log('每天早上六点执行的任务');
});

参数详解

cron.schedule('* * * * * *', () => {
});

Cron 表达式是一个字符串,由空格分隔的 6 或 7 个字段组成,用于指定任务的执行时间。这些字段分别代表:

  • 秒(可选,范围 0-59)

  • 分钟(0-59)

  • 小时(0-23)

  • 日期(1-31)

  • 月份(1-12 或 JAN-DEC)

  • 星期(0-7 或 SUN-SAT,其中 0 和 7 都代表星期天)

  • 年份(可选,通常省略)

  • 例子

  • 每分钟的第30秒触发: 30 * * * * *

  • 每小时的1分30秒触发 :30 1 * * * *

  • 每天的凌晨1点1分30秒触发 :30 1 1 * * *

  • 每月的1日1点1分30秒触发 :30 1 1 1 * *

  • 每年的1月1日1点1分30秒触发 :30 1 1 1 1 *

  • 每周1的1点1分30秒触发 :30 1 1 * 1 *

区别

node-cron是一个基于cron表达式的模块,cron表达式可以用来定义定期执行的规则,支持分钟、小时、天、周、月等粒度。node-cron使用起来比较简单,可以通过类似于命令行的方式定义定期执行的规则和要执行的任务。

node-schedule则是一个更加灵活的定时任务调度模块,可以通过人性化的时间表达方式定义定期执行的规则,支持秒、分、时、日、周、月等维度。node-schedule的使用更加灵活,可以处理复杂的定时任务调度场景,比如每周三执行一次,或者每个月最后一天执行一次。它还支持链式调用、取消定时任务等功能。

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 `node-schedule` 模块可以很方便地测试一个时间是否满足 cron 表达式。 首先需要安装 `node-schedule` 模块,可以使用以下命令进行安装: ``` npm install node-schedule ``` 接下来,可以使用 `schedule.cronJob()` 方法创建一个 cron 任务,并设置它的 cron 表达式。然后,可以使用 `job.nextInvocation()` 方法获取下一次任务执行的时间,或者使用 `job.pendingInvocations()` 方法获取未来若干个执行时间。 以下是一个示例代码: ```javascript const schedule = require('node-schedule'); // 创建一个 cron 任务 const job = schedule.cronJob('0 0 * * * *', function() { console.log('执行任务'); }); // 获取下一次任务执行的时间 console.log(job.nextInvocation().toString()); // 判断一个时间是否满足 cron 表达式 const date = new Date('2022-01-01T00:00:00Z'); // 设置一个时间 if (job.schedule(date)) { console.log(`${date} 满足 cron 表达式`); } else { console.log(`${date} 不满足 cron 表达式`); } ``` 在上面的示例中,创建了一个 cron 任务,它的 cron 表达式为每秒执行一次。然后使用 `nextInvocation()` 方法获取了下一次任务执行的时间,并输出了结果。接下来,设置了一个时间,并使用 `schedule()` 方法判断它是否满足 cron 表达式,最后输出了结果。 注意,`schedule()` 方法会返回一个布尔值,表示给定的时间是否满足 cron 表达式。如果返回 `true`,则表示满足;如果返回 `false`,则表示不满足。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值