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

 更新时间:2025年10月25日 13:48:53   作者:结城  
node-cron是一个轻量级的Node.js库,用于在指定时间或间隔执行任务,它支持Cron表达式,适用于定时任务场景,文章还介绍了基础用法、高级功能、实际应用示例以及注意事项

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记录任务执行情况。

参考资料:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • nvm对Node.js进行版本控制的实现

    nvm对Node.js进行版本控制的实现

    本文主要介绍了用nvm来管理Node.js版本,通过nvm用户可以轻松地在不同版本的Node.js之间切换,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • Node获取pnpm安装的包源码及代码路径操作

    Node获取pnpm安装的包源码及代码路径操作

    这篇文章主要为大家介绍了Node如何获取pnpm安装的包源码真实代码路径并操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • node.js中的favicon.ico请求问题处理

    node.js中的favicon.ico请求问题处理

    本文记录了在项目中使用node.js请求favican.ico的时候会出现2条请求,浪费资源,经过一番改进,记录下来过程,以后注意。
    2014-12-12
  • Node.js匹配文件夹所有文件关键字的完整教程

    Node.js匹配文件夹所有文件关键字的完整教程

    本文基于nodejs构建一个自动化检测工具:读取 Excel 中的关键字,在指定目录的所有文件中搜索是否存在对应内容,最终生成带标记结果的 Excel 文件,需要的朋友可以参考下
    2025-04-04
  • 一文详解nodejs的path模块使用

    一文详解nodejs的path模块使用

    这篇文章主要为大家介绍了nodejs的path模块使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • NodeJS 创建目录和文件的方法实例分析

    NodeJS 创建目录和文件的方法实例分析

    这篇文章主要介绍了NodeJS 创建目录和文件的方法,涉及node.js中fs模块mkdir、writeFile及目录判断existsSync等方法的功能与相关使用技巧,需要的朋友可以参考下
    2023-04-04
  • nodejs爬虫初试superagent和cheerio

    nodejs爬虫初试superagent和cheerio

    这篇文章主要介绍了nodejs爬虫初试superagent和cheerio的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03
  • node.js在Linux下执行shell命令、.sh脚本的问题

    node.js在Linux下执行shell命令、.sh脚本的问题

    很多时候需要多个命令来完成一项工作,而这个工作又常常是重复的,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本示例
    2022-01-01
  • Node.js笔记之process模块解读

    Node.js笔记之process模块解读

    这篇文章主要介绍了Node.js process模块解读,process存在于全局对象上,不需要使用require()加载即可使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • xtemplate node.js 的使用方法实例解析

    xtemplate node.js 的使用方法实例解析

    这篇文章主要介绍了xtemplate node.js 的使用方法实例说明,非常不错,介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08

最新评论