一、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