使用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.pswp.cn/news/917181.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前缀和-525.连续数组-力扣(LeetCode)

一、题目解析1、只包含0、1的二进制数组2、找到含有相同数量的0和1,并返回其子数组长度二、算法原理解法1:暴力枚举 时间复杂度O(N^2)解法2:前缀和哈希表对于统计子数组中的0和1的数量有点困难,我们可以将其转化一下转化&#xff…

汽车电子控制系统开发的整体安全理念

1. 摘要在汽车制造商和一级供应商避免责任的背景下,公认的技术规则作为法律要求的标准具有重要的实际意义。道路车辆电子控制单元的安全性目前主要通过 ISO 26262 的要求和流程来保障。特别是随着道路交通自动化程度的不断提高以及现代车辆随之而来的复杂性&#xf…

IDEA重新安装常用设置

IDEA重新安装常用设置 展示固定导航栏 项目构建和运行操作委托给maven 参考:IDEA build委托到Maven build

微服务的编程测评系统9-竞赛新增-竞赛编辑

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言1. 竞赛新增1.1 竞赛基本信息增加-后端开发1.2 竞赛新增题目-后端1.3 竞赛基本信息-前端1.4 竞赛新增题目-前端2. 竞赛编辑2.1 竞赛详情-后端2.2 竞赛详情-前端2…

《零基础入门AI:线性回归进阶(梯度下降算法详解)》

在上一篇博客中,我们学习了线性回归的基本概念、损失函数(如MSE)以及最小二乘法。最小二乘法通过求解解析解(直接计算出最优参数)的方式得到线性回归模型,但它有一个明显的局限:当特征数量很多时…

基于C语言实现的KV存储引擎(一)

基于C语言实现的KV存储引擎项目简介整体架构网络模块的实现recatorproactorNtyco项目简介 本文主要是基于 C 语言来实现一个简单的 KV 存储架构,目的就是将网络模块跟实际开发结合起来。 首先我们知道对于数据的存储可以分为两种方式,一种是在内存中进…

c++和python联合编程示例

安装 C与 Python 绑定工具 pip install pybind11这其实相当于使用 python 安装了一个 c的库 pybind11,这个库只由头文件构成, 支持基础数据类型传递以及 python 的 numpy 和 c的 eigen 库之间的自动转换。 编写 CMakeList.txt cmake_minimum_required(VERSION 3.14)…

【OD机试题解法笔记】贪心歌手

题目描述 一个歌手准备从A城去B城参加演出。 按照合同,他必须在 T 天内赶到歌手途经 N 座城市歌手不能往回走每两座城市之间需要的天数都可以提前获知。歌手在每座城市都可以在路边卖唱赚钱。 经过调研,歌手提前获知了每座城市卖唱的收入预期&#xff1a…

AI: 告别过时信息, 用RAG和一份PDF 为LLM打造一个随需更新的“外脑”

嘿,各位技术同学!今天,我们来聊一个大家在使用大语言模型(LLM)时都会遇到的痛点:知识过时。 无论是像我一样,用 Gemini Pro 学习日新月异的以太坊,还是希望它能精确掌握某个特定工具…

深度学习(鱼书)day08--误差反向传播(后三节)

深度学习(鱼书)day08–误差反向传播(后三节)一、激活函数层的实现 这里,我们把构成神经网络的层实现为一个类。先来实现激活函数的ReLU层和Sigmoid层。ReLU层 激活函数ReLU(Rectified Linear Unit&#xff…

C# 中生成随机数的常用方法

1. 使用 Random 类(简单场景) 2. 使用 RandomNumberGenerator 类(安全场景) 3. 生成指定精度的随机小数 C# 中生成随机数的常用方法: 随机数类型实现方式示例代码特点与适用场景随机整数(无范围&#xf…

Flink 算子链设计和源代码实现

1、JobGraph (JobManager) JobGraph 生成时,通过 ChainingStrategy 连接算子,最终在 Task 中生成 ChainedDriver 链表。StreamingJobGraphGeneratorcreateJobGraph() 构建jobGrapch 包含 JobVertex setChaining() 构建算子链isCha…

对接八大应用渠道

背景最近公司想把游戏包上到各个渠道上,因此需要对接各种渠道,渠道如下,oppo、vivo、华为、小米、应用宝、taptap、荣耀、三星等应用渠道 主要就是对接登录、支付接口(后续不知道会不会有其他的)&#x…

学习:入门uniapp Vue3组合式API版本(17)

42.打包发行微信小程序的上线全流程 域名 配置 发行 绑定手机号 上传 提交后等待,上传 43.打包H5并发布上线到unicloud的前端页面托管 完善配置 unicloud 手机号实名信息不一致:请确保手机号的实名信息与开发者姓名、身份证号一致,请前往开…

SOLIDWORKS材料明细表设置,属于自己的BOM表模板

上一期我们了解了如何在SOLIDWORKS工程图中添加材料明细表?接下来,我们将进行对SOLIDWORKS材料明细表的设置、查看缩略图、模板保存的深度讲解。01 材料明细表设置菜单栏生成表格后左侧菜单栏会显示关于材料明细表的相关设置信息。我们先了解一下菜单栏设置详情&am…

全栈:Maven的作用是什么?本地仓库,私服还有中央仓库的区别?Maven和pom.xml配置文件的关系是什么?

Maven和pom.xml配置文件的关系是什么: Maven是一个构建工具和依赖管理工具,而pom.xml(Project Object Model)是Maven的核心配置文件。 SSM 框架的项目不一定是 Maven 项目,但推荐使用 Maven进行管理。 SSM 框架的项目可…

超越 ChatGPT:智能体崛起,开启全自主 AI 时代

引言 短短三年,生成式 AI 已从对话助手跨越到能自主规划并完成任务的“智能体(Agentic AI)”时代。这场演进不仅体现在模型规模的提升,更在于系统架构、交互范式与安全治理的全面革新。本文按时间线梳理关键阶段与核心技术,为您呈现 AI 智能体革命的脉络与未来趋势。 1. …

一杯就够:让大脑瞬间在线、让肌肉满电的 “Kick-out Drink” 全解析

一杯就够:让大脑瞬间在线、让肌肉满电的 “Kick-out Drink” 全解析“每天清晨,当闹钟还在哀嚎,你举杯一饮,睡意像被扔出擂台——这,就是 Kick-out Drink 的全部浪漫。”清晨 30 分钟后,250 mL 常温水里溶解…

系统开机时自动执行指令

使用 systemd 创建一个服务单元可以让系统开机时自动执行指令,假设需要执行的指令如下,运行可执行文件(/home/demo/可执行文件),并输入参数(–input/home/config/demo.yaml): /home/…

Docker 初学者需要了解的几个知识点 (七):php.ini

这段配置是 php.ini 文件中针对 PHP 扩展和 Xdebug 调试工具的设置,主要用于让 PHP 支持数据库连接和代码调试(尤其在 Docker 环境中),具体解释如下:[PHP] extensionpdo_mysql extensionmysqli xdebug.modedebug xdebu…