10分钟上手Node.js定时任务:node-cron全场景解决方案
【免费下载链接】node-cron Cron for NodeJS. 项目地址: https://gitcode.com/gh_mirrors/no/node-cron
你是否还在为Node.js应用中的定时任务配置烦恼?从简单的每小时数据备份到复杂的多任务协同调度,一文掌握node-cron的核心用法与最佳实践。读完本文你将获得:
- 3种基础定时模式的实现代码
- 5个企业级场景的解决方案
- 2套任务监控与错误处理模板
- 完整的项目资源导航
项目概述
node-cron是一个基于Cron语法的Node.js定时任务调度库,支持秒级精度的任务触发、多任务并行管理和时区定制等高级特性。项目核心代码位于src/目录,包含任务调度核心逻辑src/job.ts和时间解析模块src/time.ts。
核心功能矩阵
| 功能特性 | 实现文件 | 应用场景 |
|---|---|---|
| Cron语法解析 | src/time.ts | 标准定时任务 |
| 任务生命周期管理 | src/job.ts | 任务启停控制 |
| 时间 zone 支持 | src/types/cron.types.ts | 跨时区调度 |
| 任务错误处理 | src/errors.ts | 异常捕获与恢复 |
快速入门
环境准备
通过npm安装node-cron到你的项目:
npm install cron
项目初始化配置可参考package.json中的依赖声明和脚本定义。
基础示例
创建每秒执行的定时任务,代码示例来自examples/basic.mjs:
import { CronJob } from 'cron';
// 创建每秒执行的任务
const job = new CronJob('* * * * * *', function() {
const d = new Date();
console.log('Every second:', d);
});
// 启动任务
job.start();
代码解析:通过
CronJob构造函数创建任务实例,第一个参数为6位Cron表达式(秒 分 时 日 月 周),第二个参数为任务执行函数。
多任务管理
同时调度多个独立任务,示例来自examples/multiple_jobs.mjs:
import { CronJob } from 'cron';
// 每5秒执行一次的任务
const job1 = new CronJob('*/5 * * * * *', () => {
console.log('First job:', new Date().toISOString());
});
// 每8秒执行一次的任务
const job2 = new CronJob('*/8 * * * * *', () => {
console.log('Second job:', new Date().toISOString());
});
// 启动所有任务
job1.start();
job2.start();
高级应用场景
工作日定时任务
配置每周一至周五上午11:30执行的任务,使用examples/mon_to_fri_at_11_30.mjs中的模式:
// 周一至周五 11:30执行
const job = new CronJob('0 30 11 * * 1-5', () => {
console.log('Weekday report generation');
}, null, true, 'Asia/Shanghai');
注意:Cron表达式中周几的范围是0-7(0和7都代表周日),月份范围是1-12。
时间区间限制
在特定时间段内执行任务,如工作日9点到17点每30分钟执行:
// 9:00-17:00每30分钟执行
const job = new CronJob('0 */30 9-17 * * 1-5', () => {
console.log('Working hour task');
});
完整示例见examples/every_30_minutes_between_9_and_5.mjs。
任务监控与管理
通过任务实例的属性监控运行状态:
const job = new CronJob('* * * * * *', async () => {
console.log('Task running:', job.isCallbackRunning);
await someLongRunningTask();
});
// 任务状态检查
setInterval(() => {
console.log('Job active:', job.isActive);
console.log('Next run:', job.nextDate().toISO());
}, 1000);
常见问题解决方案
任务执行重叠
当任务执行时间超过调度间隔时,启用waitForCompletion参数防止重叠执行:
const job = new CronJob(
'* * * * * *',
async () => {
await longRunningOperation();
},
null,
true, // 立即启动
'UTC', // 时区
null, // 上下文
false, // 初始化时不执行
null, // UTC偏移
false, // 不解绑超时
true // 等待完成后再调度
);
时区配置问题
明确指定任务执行时区,避免服务器时区影响:
// 纽约时区每天午夜执行
const job = new CronJob(
'0 0 0 * * *',
() => {
console.log('New York midnight task');
},
null,
true,
'America/New_York'
);
时区配置详情可参考src/types/cron.types.ts中的TimeZone定义。
项目资源
示例集合
项目提供17个场景化示例,覆盖从基础到高级的各类应用场景,完整列表:
- examples/at_10_minutes.mjs - 特定分钟执行
- examples/complex_expr.mjs - 复杂表达式
- examples/get_next_runs.mjs - 获取后续执行时间
- examples/utc_offset_syntax.mjs - UTC偏移配置
测试与验证
项目测试用例位于tests/目录,包含:
- tests/cron.test.ts - 核心功能测试
- tests/crontime.test.ts - 时间解析测试
- tests/threshold.test.ts - 执行阈值测试
总结与展望
node-cron作为轻量级定时任务解决方案,适合中小型Node.js应用使用。通过本文介绍的基础API、场景示例和最佳实践,你可以快速实现各类定时任务需求。项目持续维护中,最新动态可关注CHANGELOG.md。
对于企业级应用,建议结合日志系统和监控工具,实现任务执行状态的可视化管理。未来版本可能会增强的功能包括:
- 分布式任务协调
- 任务优先级队列
- 更丰富的错误恢复策略
若需贡献代码或报告问题,请参考CONTRIBUTING.md中的指南。
本文档示例代码均来自项目官方示例库,实际应用时请根据具体业务需求调整。
【免费下载链接】node-cron Cron for NodeJS. 项目地址: https://gitcode.com/gh_mirrors/no/node-cron
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



