Node.js定时任务之node-schedule使用详解

Node.js定时任务之node-schedule使用详解

目录

Node.js node-schedule使用

安装

使用

开启定时任务

取消定时任务

node-schedule定时只执行一次任务

以下,是官方npm的示例

中文解释

Node.js node-schedule使用

实际工作中,可能会遇到定时清除某个文件夹内容,定时发送消息或发送邮件给指定用户,定时导出某些数据等。

Node.js 中可以使用 node-schedule 来完成定时任务

安装 npm i node-schedule --save 使用

使用的是 Cron 风格的定时器

* * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ | │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun) │ │ │ │ └───── month (1 - 12) │ │ │ └────────── day of month (1 - 31) │ │ └─────────────── hour (0 - 23) │ └──────────────────── minute (0 - 59) └───────────────────────── second (0 - 59, OPTIONAL)

6个占位符分别标识 :秒 分 时 日 月 周几

* 表示通配符,匹配该域的任意值,假如在 Minutes 域使用 * 表示每分钟都会触发事件

? 只能用在 DayofMonth 和 DayofWeek 两个域,它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用 * 表示不管星期几都会触发,实际上并不是这样。

- 表示范围,例如 在 Minutes 域使用 5-20,表示从5分到20分钟每分钟触发一次

/ 表示起始时间开始触发,然后每隔固定时间触发一次,如在 Minutes 域使用 5/20 表示5分钟触发一次,而25,45等分别触发一次

‘,’ 表示枚举值,如在 Minutes 域使用 5, 20,表示在 5和20分每分钟触发一次

由于月份中的日期和星期中的日期这两个元素互斥,必须要对其中一个设置 ?

先看几个示例熟悉一下:

每分钟的第30秒触发: '30 * * * * *'

每小时的1分30秒触发 :'30 1 * * * *'

每天的凌晨1点1分30秒触发 :'30 1 1 * * *'

每月的1日1点1分30秒触发 :'30 1 1 1 * *'

2016年的1月1日1点1分30秒触发 :'30 1 1 1 2016 *'

每周1的1点1分30秒触发 :'30 1 1 * * 1'

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点

开启定时任务 const schedule = require('node-schedule') schedule.scheduleJob(id, '30 * * * * *', () => {    // 具体任务内容....    try {    } catch(error) {    }  }) 取消定时任务 schedule.cancelJob(id)

开启定时任务是,可以传入一个id,在取消任务时就可以根据 id 来取消了。

取消定时器还有一种方法 schedule.cancel()

node-schedule定时只执行一次任务

对于node-schedule执行定时任务,经常使用,但是在使用只执行一次定时任务时,由于用的频率较低(之前一直没用到),就顺手去搜索了一下,结果就是,导致了bug的出现!!!

当你需要在具体的时间执行一次,可以使用new Date来定义一个时间

以下,是官方npm的示例 Date-based Scheduling Say you very specifically want a function to execute at 5:30am on December 21, 2012. Remember - in JavaScript - 0 - January, 11 - December. const schedule = require('node-schedule'); const date = new Date(2012, 11, 21, 5, 30, 0); const job = schedule.scheduleJob(date, function(){   console.log('The world is going to end today.'); }); To use current data in the future you can use binding: const schedule = require('node-schedule'); const date = new Date(2012, 11, 21, 5, 30, 0); const x = 'Tada!'; const job = schedule.scheduleJob(date, function(y){   console.log(y); }.bind(null,x)); x = 'Changing Data'; This will log 'Tada!' when the scheduled Job runs, rather than 'Changing Data', which x changes to immediately after scheduling. 中文解释

就是说你特别想要一个函数在 2012年12月12日早上5:30执行。

记住在JavaScript中- 0 - 星期一, 11 - 十二月.(意思就是星期数和月份数都是从0开始计数的)

var schedule = require('node-schedule'); var date = new Date(2012, 11, 21, 5, 30, 0); var j = schedule.scheduleJob(date, function(){   console.log('世界将在今天走向 结束.'); });

要在未来使用当前数据,你可以使用绑定:

var schedule = require('node-schedule'); var date = new Date(2012, 11, 21, 5, 30, 0); var x = 'Tada!'; var j = schedule.scheduleJob(date, function(y){   console.log(y); }.bind(null,x)); x = 'Changing Data';

当调度的任务运行时,这个将会打印出’Tada!’,而不是 ‘Changing Data’,

这个x会在调度后立即更改.

此时的new Date中的月份取值范围是1~11,所以

如果你不想因为月份增加代码中的多余操作

:00可以使用如下操作获取date

let date = new Date("2012-12:12 05:30:00")

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    js设置div的边框|怎样给div设置边框

    js设置div的边框|怎样给div设置边框,,1. 怎样给div设置边框1、首先新建一个html文件,输入基本的内容,这里设置一个div,并把它的class设置为de

    js设置样式|js设置样式类

    js设置样式|js设置样式类,,js设置样式    javascript改变CSS样式分为局部和全局,分别如下:  一、局部改变样式    有三种方法:直接

    js用代码实现简单购物车

    js用代码实现简单购物车,,图: 选择所有按钮: 复制代码代码如下所示: 选择 笔记本电脑:3000元 笔记本电脑:3000元 笔记本电脑:3000元 笔记本电脑:3

    js设置背景色|js设置颜色

    js设置背景色|js设置颜色,,js设置背景色首先通过js定位到div的子元素,再通过setatteibute方法给属性添加背景色。js设置颜色js改变字体的颜

    Safari调试iOS中的js

    Safari调试iOS中的js,页面,设备,概述对于HTML5的开发,大家都知道Chrome的DevTools工具有强大的功能和友好的用户体验,不仅能快速方便调试Jav

    Bootstrap的js插件之模态框|modal

    Bootstrap的js插件之模态框|modal,模态,饭盒,.modal——指明div元素包裹模态框;.fade——给模态框添加淡入淡出效果;.modal-dialog——包裹

    js默认事件汇总

    js默认事件汇总,事件,表单,默认事件   就是浏览器通过HTML标签或DOM元素提供的一些功能性的默认行为。比如在a标签href属性上的跳转,右键

    js获取元素宽度

    js获取元素宽度,内联,样式,js获取元素宽度1、使用内联样式,即直接把CSS写在HTML元素的style属性中<div > </div>复制代码通过以下js代码

    SQLite使用JSON扩展

    SQLite使用JSON扩展,插件,加载,一、介绍 SQLite3.9.0之后的版本,添加了JSON扩展。在表中可以保存JSON类型。实际上SQLite将JSON类型的

    jscript.dll是什么

    jscript.dll是什么,系统,文件,论坛,显示,扫描,修复,  jscript.dll是Microsoft JavaScript脚本支持相关文件。属于: Microsoft JScript系统 DLL