NodeJs实现定时任务的示例代码


Posted in NodeJs onDecember 05, 2017

在项目中有个每天0点执行的函数,本来想用setInterval来实现,但觉得这种需求以后应该还会有,自己写可能拓展性不高。

搜了一下发现了node-schedule这个包。

现在记录一下使用方法

node-schedule没次都是通过新建一个scheduleJob对象来执行具体方法。

时间数值按下表表示

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

使用node-schedule在指定时间执行方法

var schedule = require('node-schedule');
var date = new Date(2017, 11, 16, 16, 43, 0);

var j = schedule.scheduleJob(date, function(){
 console.log('现在时间:',new Date());
});

在2017年12月16日16点43分0秒,打印当时时间

指定时间间隔执行方法

var rule = new schedule.RecurrenceRule();
rule.second = 10;
var j = schedule.scheduleJob(rule, function(){
 console.log('现在时间:',new Date());
});

这是每当秒数为10时打印时间。如果想每隔10秒执行,设置 rule.second =[0,10,20,30,40,50]即可。

rule支持设置的值有second,minute,hour,date,dayOfWeek,month,year

同理:

每秒执行就是rule.second =[0,1,2,3......59]
每分钟0秒执行就是rule.second =0
每小时30分执行就是rule.minute =30;rule.second =0;
每天0点执行就是rule.hour =0;rule.minute =0;rule.second =0;
....
每月1号的10点就是rule.date =1;rule.hour =10;rule.minute =0;rule.second =0;
每周1,3,5的0点和12点就是rule.dayOfWeek =[1,3,5];rule.hour =[0,12];rule.minute =0;rule.second =0;
....

示例

1:确定时间

例如:2014年2月14日,15:40执行

var schedule = require("node-schedule");

  var date = new Date(2014,2,14,15,40,0);

  var j = schedule.scheduleJob(date, function(){


console.log("执行任务");

  });

取消任务

j.cancel();

2:每小时的固定时间

例如:每小时的40分钟执行

var rule = new schedule.RecurrenceRule();


rule.minute = 40;


var j = schedule.scheduleJob(rule, function(){



console.log("执行任务");


});

3:一个星期中的某些天的某个时刻执行,

例如:周一到周日的20点执行

var rule = new schedule.RecurrenceRule();


rule.dayOfWeek = [0, new schedule.Range(1, 6)];


rule.hour = 20;


rule.minute = 0;


var j = schedule.scheduleJob(rule, function(){



console.log("执行任务");


});

4:每秒执行

var rule = new schedule.RecurrenceRule();


var times = [];


for(var i=1; i<60; i++){



times.push(i);


}


rule.second = times;


var c=0;

var j = schedule.scheduleJob(rule, function(){
   
 c++;
   
console.log(c);

});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
使用upstart把nodejs应用封装为系统服务实例
Jun 01 NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
nodejs的压缩文件模块archiver用法示例
Jan 18 NodeJs
解析NodeJS异步I/O的实现
Apr 13 NodeJs
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
May 13 NodeJs
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
Sep 19 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
使用nodejs+express实现简单的文件上传功能
Dec 27 NodeJs
使用koa-log4管理nodeJs日志笔记的使用方法
Nov 30 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
windows系统下更新nodejs版本的方案
Nov 24 #NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 #NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 #NodeJs
NodeJS实现视频转码的示例代码
Nov 18 #NodeJs
详解NODEJS基于FFMPEG视频推流测试
Nov 17 #NodeJs
nodejs async异步常用函数总结(推荐)
Nov 17 #NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 #NodeJs
You might like
PHP 数字左侧自动补0
2008/03/31 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
PHP实现简单日历类编写
2020/08/28 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
js获取json中key所对应的value值的简单方法
2020/06/17 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
react-native之ART绘图方法详解
2017/08/08 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
使用Python对MySQL数据操作
2017/04/06 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
基于python实现雪花算法过程详解
2019/11/16 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
python实现双人五子棋(终端版)
2020/12/30 Python
成教自我鉴定
2013/10/27 职场文书
清洁工表扬信
2014/01/08 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
项目经理任命书内容
2014/06/06 职场文书
党员自我剖析材料
2014/08/31 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
订货会邀请函
2015/01/31 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
步步惊心观后感
2015/06/12 职场文书
导游词之凤凰古城
2019/10/22 职场文书
Java详细解析==和equals的区别
2022/04/07 Java/Android