在使用 Node.js 构建 Web 应用程序和 API 时,我们有时会遇到需要重复执行的任务,例如电子邮件通知、文件下载和数据库备份等。 这可能是每天、每月甚至每年的特定时间,具体取决于在任务上。
Node-schedule是 Node.js 最流行的灵活的类似 cron 的任务调度库。两者很类似,是基于时间的时间表,而不是基于间隔的时间表和它被设计为在进程的调度。进程内调度意味着“调度作业只会在您的脚本运行时触发,并且在执行完成时调度将消失”。
如果您需要安排即使在您的脚本未运行时也会持续存在的作业,请考虑使用实际的 Node-cron。
Node-cron 简介
Node-cron是一个npm 包,它是用纯 JavaScript为node编写的,它基于GNU crontab语法。因此,第一步是基于学习node-cron和cron-syntaxes。
Node-cron 语法
cron 的操作由crontab(cron 表)文件驱动,这是一个包含 cron 守护程序指令的配置文件。Cron 守护进程是在内存中运行的系统管理可执行文件,可用于调度任务。
以下作业计划在每小时的每 2 分钟运行一次。
import * as cron from 'node-cron' |
上述*的地方意味着“每一秒、每一小时、每一天、每一个月和一周中的每一天”。
下面的另一个例子显示了每天早上 5.30 运行的 cron 作业,
cron.schedule('30 5 * * *', () => { |
如果我们想安排在一年中每个季度的第一天执行的作业,我们可以按如下方式进行。
cron.schedule('0 0 1 */3 *', () => { |
在这里你可以看到,我们使用了一个特殊的字符 (/),而不是通常的星号。就这样,cron 作业调度中引入了一些特殊字符,我们可以将它们表示如下。
- 逗号:逗号可用于分隔少数几个值。例如,每 2 分钟和 5 分钟,我们可以将其表示为 2,5。
- 连字符:连字符 (-) 用于提供值的范围,例如 Monday-Friday。
- 斜线:斜线用于提供步进值,例如每 5 秒,我们可以将其表示为 */5。
下面显示了另一个示例,它可以安排作业在每周一到周五(仅限工作日)下午 4 点执行:
cron.schedule('0 16 * * 1-5', () => { |
另一个例子显示了在早上 5 点到早上 7 点之间每 15 分钟执行一次的作业。
cron.schedule('*/15 5-7 * * *', () => { |
作业调度中使用的方法
启动计划:在初始化时,如果将 cron 选项设置为 False,那么即使到达计划时间,计划作业也不会执行。如果您需要启动该作业,则需要调用如下所示的start方法。
const cron = require('node-cron'); |
停止调度:如果您需要停止正在执行的任何调度,您应该使用stop方法。即使重新启动,计划也不会执行。
const cron = require('node-cron'); |
销毁时间表:您可以使用destroy方法永久销毁时间表。
const cron = require('node-cron'); |