Node.js基于node-schedule实现定时任务的操作步骤 |
||||||||||||
一、定时任务实际工作中,可能会遇到定时清除某个文件夹内容,定时发送消息或发送邮件给指定用户,定时导出某些数据等 。借助setTimeout和setInterval来实现的化太过麻烦,node-schedule是一个非常不错的npm包,可以帮助我们快速的创建和管理定时任务 。 定时任务是指在预定的时间点或时间间隔内执行的任务或操作 。它们是自动化执行特定逻辑的一种方式,可用于执行重复性的、周期性的或计划性的任务 。 定时任务通常用于以下情况:
二、node-schedule、1、安装npm install node-schedule 2、引入CommonJS: const schedule = require('node-schedule'); ES模块 import schedule from 'node-schedule' 3、基于Cron表达式的规则Cron表达式是一种用于指定定时任务执行时间的字符串表示形式 。它由6个字段组成,每个字段表示任务执行的时间单位和范围 。 * * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ │ │ └ 星期几(0 - 7) (0相对于周日) │ │ │ │ └───── 月 (1 - 12) │ │ │ └────────── 日 (1 - 31) │ │ └─────────────── 时 (0 - 23) │ └──────────────────── 分 (0 - 59) └───────────────────────── 秒 (0 - 59) 每个字段可以接受特定的数值、范围、通配符和特殊字符来指定任务的执行时间:
使用cron字符串作为rule时,建议写完整,可读性比较好 。 以下是一些常见的Cron表达式示例: * * * * * * :每秒执行 */5 * * * * * :每5秒执行 * 30 * * * * :每30分钟执行 */10 30 * * * * :每30分钟的10秒执行 2,4,6 * * * * * :每个2秒,4秒和6秒执行 0 0 0 ? * 1 :每周一早上的零点执行 * * * 20 * ? :每月的20日触发 4、基于Date的规则当你需要在具体的时间执行一次,可以使用new Date来定义一个时间 。 假设您非常希望在一个精确到某一个时间点上的秒数的仅触发一次的计划 。 const schedule = require('node-schedule'); //2024年,6月,1日,6时,1分,0秒 //month 范围是 0'11 而非1'12 const date = new Date(2024, 5, 1, 6, 1, 0); const job = schedule.scheduleJob(date, ()=>{ console.log('Happy Children's Day !'); }); 5、基于RecurrenceRule的规则如果你的任务是定时重复执行的,并且你希望有比cron更高的可读性,你可以尝试使用RecurrenceRule对象作为rule 。 function Recurrence(year, month, date, dayOfWeek, hour, minute, second, tz)
const rule = new schedule.RecurrenceRule(); //每个15、30、45秒执行 rule.second = [15, 30, 45]; const job = schedule.scheduleJob(rule, () => { console.log(`每次计划执行的时间:${new Date().toLocaleString()}`); });
rule.second = 10;
rule.minute = 10;
rule.dayOfWeek = [0, new schedule.Range(4, 6)]; rule.hour = 17; rule.minute = 0; 6、API
需要用到scheduleJob函数,会返回一个Job实例对象: function scheduleJob(name: string, rule: ..., callback: function): schedule.Job 参数
可以通过scheduleJob(name, rule, callback)或者scheduleJob(rule, callback)创建计划 。 const rule = '* * * * * *'; const job = schedule.scheduleJob(rule,()=>{});
schedule.cancelJob(id) 7、状态监听import schedule from 'node-schedule'; //设置规则 const rule = "*/10 * * * * *" //设置任务 const job = schedule.scheduleJob(rule, () => { console.log('2、每次计划执行中的事件 。'); }); job.on("scheduled", () => { console.log("1、每次计划执行前的事件 。"); }); job.on("run", () => { console.log("3、每次计划执行后的事件 。"); }); job.on("success", () => { console.log(`4、每次计划执行成功事件 。`); }); job.on("error", (err) => { console.log(`[error][${new Date().toLocaleString()}]${err.message}`); }); job.on("canceled", () => { console.log("计划取消!"); }) 到此这篇关于Node.js基于node-schedule实现定时任务的操作步骤的文章就介绍到这了,更多相关Node.js node-schedule定时任务内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |