当前位置: 首页 > news >正文

使用node-cron实现Node.js定时任务

1. 简介

node-cron 是一个轻量级的Node.js库,用于在指定时间或间隔执行任务。它是Unix系统cron工具的JavaScript实现,适用于需要定时执行脚本的场景(如数据备份、定期爬虫等)。

2. 安装

npm install node-cron
# 或
yarn add node-cron

3. 基础用法

import cron from 'node-cron';// 每分钟执行
cron.schedule('* * * * *', () => {console.log('每分钟触发');
});

4. Cron表达式详解

表达式由5个字段组成:

*    *    *    *    *
┬    ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    └── 星期几 (0 - 7) (0和7代表周日)
│    │    │    └────── 月份 (1 - 12)
│    │    └────────── 日期 (1 - 31)
│    └────────────── 小时 (0 - 23)
└─────────────────── 分钟 (0 - 59)

常用示例:

表达式说明
*/5 * * * *每5分钟
0 * * * *每小时整点
0 0 * * *每天午夜
0 9 * * 1-5工作日早上9点
30 3 15 * *每月15日凌晨3:30

5. 高级功能

5.1 带参数配置

const task = cron.schedule('*/10 * * * *', () => {console.log('每10分钟执行');
}, {scheduled: true,       // 是否立即启动timezone: 'Asia/Shanghai' // 时区设置
});

5.2 任务控制

// 暂停任务
task.stop();// 恢复任务
task.start();// 检查任务状态
console.log(task.getStatus()); // 返回 'running' 或 'stopped'

6. 实际应用示例

示例1:每日数据清理

import cron from 'node-cron';
import cleanupDatabase from './cleanup.js';// 每天凌晨3点清理
cron.schedule('0 3 * * *', () => {console.log('开始数据库清理...');cleanupDatabase();
});

示例2:API定时请求

import axios from 'axios';// 每30分钟获取天气数据
cron.schedule('*/30 * * * *', async () => {const res = await axios.get('https://api.weather.com/data');console.log('天气数据:', res.data);
});

7. 注意事项

  1. 精度问题:Node.js事件循环可能导致最多几毫秒的延迟
  2. 错误处理:务必在任务函数中添加try/catch
  3. 长任务:避免任务执行时间超过间隔时间
  4. 集群环境:在多进程部署时需要额外处理防止重复执行

8. 替代方案

  • node-schedule:更复杂的调度规则
  • bull:分布式任务队列
  • 系统级cron:通过child_process调用

🚀 提示:在生产环境中建议添加日志记录和监控,可以使用winstonbunyan记录任务执行情况。

参考资料:

  • node-cron官方文档:https://github.com/node-cron/node-cron
  • Cron表达式标准:IEEE Std 1003.1

点个收藏,关注前端结城,一起用代码点亮前端世界!🚀

http://www.dtcms.com/a/302363.html

相关文章:

  • Office-PowerPoint-MCP-Server – 基于MCP的开源PPT生成与编辑工具
  • 每日面试题16:什么是双亲委派模型
  • DBSyncer:开源免费的全能数据同步工具,多数据源无缝支持!
  • 代码随想录day48单调栈1
  • Python全栈项目--基于深度学习的视频内容分析系统
  • html转word下载
  • 【GitHub Workflows 基础(二)】深入理解 on、jobs、steps 的核心语法与执行逻辑
  • Dify快速搭建问答系统
  • 3、CC3200串口DMA
  • Binary Classifier Optimization for Large Language Model Alignment
  • 亚远景-“过度保守”还是“激进创新”?ISO/PAS 8800的99.9%安全阈值之争
  • Windows 11 系统 Docker详细安装教程并集成使用 Redis 官方详细教程
  • uniapp,uview icon加载太慢了,老是显示叉叉,将远程加载改到本地加载。
  • LangGraph实战:整合MCP(本地模式
  • 机器学习sklearn:不纯度与决策树构建
  • 数据中心入门学习(四):服务器概述与PCIe总线
  • 【学习笔记】AD7708/18(1)-理解官网的参考代码
  • python每日一题
  • 如何在 Apache Ignite 中创建和使用自定义 SQL 函数(Custom SQL Functions)
  • 生物信息学数据技能-学习系列001
  • 牛客网之华为机试题:坐标移动
  • 利用径向条形图探索华盛顿的徒步旅行
  • 数据分析干货| 衡石科技可视化创作之仪表盘控件如何设置
  • 开源智能体-JoyAgent集成ollama私有化模型
  • 【docker】DM8达梦数据库的docker-compose以及一些启动踩坑
  • 攻防世界-引导-Web_php_unserialize
  • Kafka单机如何多Broker实例集群搭建?
  • Python----大模型(基于Fastapi+gradio的对话机器人)
  • 降低焊接机器人保护气体消耗的措施
  • 递归算法的一些具体应用