node-schedule 库:灵活的 TypeScript 任务调度器
在现代 Web 开发中,经常需要在指定时间或按计划执行特定操作。对于 Node.js 和 TypeScript 生态系统,有几种解决方案,但 node-schedule 以其灵活性和简单性脱颖而出。该库允许创建一次性任务(在精确日期执行)以及使用 cron 表达式或人类可读间隔的循环任务。
node-schedule 的主要功能
- 精确执行时间 – 在特定时间点(日期 + 时间)启动任务
- Cron 表达式 – 用于周期性任务的经典语法(每分钟、每小时等)
- 循环规则 – 使用
RecurrenceRule对象灵活配置重复 - 取消和暂停 – 管理活动任务
- 时区支持 – 使用本地时间工作
安装和导入
首先通过 npm 安装包:
npm install node-schedulenpm install @types/node-schedule --save-dev在 TypeScript 文件中导入:
import * as schedule from 'node-schedule';示例 1:精确日期任务
创建一个在 2024 年 12 月 31 日 23:59:59 执行的任务:
const date = new Date(2024, 11, 31, 23, 59, 59);
const job = schedule.scheduleJob(date, () => { console.log('🎉 新年快乐!');});
// 取消任务(如果需要)// job.cancel();示例 2:使用 cron 表达式的周期性任务
每 5 分钟执行一次任务:
const job = schedule.scheduleJob('*/5 * * * *', () => { console.log('每 5 分钟执行一次任务');});Cron 表达式格式:秒 分 时 日 月 周。node-schedule 支持所有 6 个字段(与经典 cron 的 5 个字段不同)。
示例 3:使用 RecurrenceRule
创建一个在每周二和周四上午 10:30 执行的任务:
const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [2, 4]; // 周二和周四rule.hour = 10;rule.minute = 30;
const job = schedule.scheduleJob(rule, () => { console.log('发送每周报告');});RecurrenceRule 支持以下字段:
year– 年份或年份数组month– 月份(0-11)或数组date– 日期(1-31)dayOfWeek– 星期几(0-6,其中 0 表示星期日)hour– 小时(0-23)minute– 分钟(0-59)second– 秒(0-59)
示例 4:组合规则
在每月最后一天 23:59 执行的任务:
const rule = new schedule.RecurrenceRule();rule.month = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; // 所有月份rule.date = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // 每个月的最后一天rule.hour = 23;rule.minute = 59;rule.second = 59;
const job = schedule.scheduleJob(rule, () => { console.log('在每月最后一天执行');});任务管理
该库提供了完全控制任务的方法:
// 创建任务const job = schedule.scheduleJob('*/10 * * * * *', () => { console.log('每 10 秒');});
// 取消任务job.cancel();
// 检查任务是否活动console.log(job.pending()); // true 或 false
// 取消所有任务schedule.gracefulShutdow