在Node.js中实现任务调度与执行

作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs

批处理是业务开发中经常会遇到的需求,比如银行对账单的处理,又比如广告邮件的推送。

Node.js在批处理方面也有一些优秀的库,node-schedule就是其中之一。

node-schedule是一个轻量级的、基于Node.js的、类似于cron的调度器工具。其介绍可查看: https://www.npmjs.com/package/node-schedule

node-schedule允许在指定的日期时间调度执行任意任务(任意的函数),还支持循环规则。node-schedule内部只使用了单个计时器。

node-schedule是基于时间的调度器,而不是基于时间间隔的调度器。假如你有这样的需求“每隔5分钟运行某个函数一次”,你会觉得使用基于时间间隔的调度方式更适合,比如setInterval(),使用非常方便。假如你的需求是“每小时的第5分钟和第50分钟运行某个函数一次”,那么你会觉得基于时间的调度方式更适合。

还要注意,与cron不同,node-schedule在Windows系统也能得到完美的支持。

需要注意的是,node-schedule的设计目标是用于进程间的调度,也即调度的作业在调度时会运行相关脚本,当脚本执行完成后调度将消失。如果希望在脚本未运行的时候持续调度作业,那么最好还是使用cron。

在node-schedule中,每一个被调度的作业都是使用Job对象来描述的。可以手动创建Job,然后执行schedule()方法来应用调度,或使用scheduleJob()。

Job对象是EventEmitter的,在每一次调度执行时发出一个运行事件。在调度的时间到来时,它还会发出被调度的事件。当调度开始之前,要取消调度,可以发取消事件。这些事件都接收JavaScript的日期对象作为参数。

要注意,作业在首次调度时是立即执行的,因此如果你使用scheduleJob()创建作业,会失去首次立即调度的事件。
还要注意,取消事件是canceled,表达方式采用了美国英语。

要安装node-schedule很简单,执行:

npm install node-schedule
  • 1

如果你用过cron,了解cron表达式的格式,使用它则更简单。

Cron风格的调度

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

下面来看一个例子:

var scheduler = require('node-schedule');var montlyJob = scheduler.scheduleJob('0 0 1 * *', function(){    console.log('I run the first day of the month');});
  • 1
  • 2
  • 3
  • 4

还有使用JavaScript对象的方法:

var scheduler = require('node-schedule');var rule = new scheduler.RecurrenceRule();rule.hour = 7rule.dayOfWeek = new scheduler.Range(0,6)var dailyJob = scheduler.scheduleJob(date, function(){    console.log('I run on days at 7:00');});scheduler.scheduleJob(rule,task);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

还可以跳过指定日期来调度任务:

var scheduler = require('node-schedule');var date = new Date(2017, 1, 1, 0, 0, 0);var newYearJob = scheduler.scheduleJob(date, function() {    console.log("Happy new year");});
  • 1
  • 2
  • 3
  • 4
  • 5

要取消调度的作业也很简单,这样:

newYearJob.cancel();
  • 1

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

在Node js中实现任务调度与执行相关推荐

  1. node/js 漏洞_6个可用于检查Node.js中漏洞的工具

    node/js 漏洞 Vulnerabilities can exist in all products. The larger your software grows, the greater th ...

  2. node mongoose_如何使用Express,Mongoose和Socket.io在Node.js中构建实时聊天应用程序

    node mongoose by Arun Mathew Kurian 通过阿伦·马修·库里安(Arun Mathew Kurian) 如何使用Express,Mongoose和Socket.io在N ...

  3. node.js中模块_在Node.js中需要模块:您需要知道的一切

    node.js中模块 by Samer Buna 通过Samer Buna 在Node.js中需要模块:您需要知道的一切 (Requiring modules in Node.js: Everythi ...

  4. boa支持https_Boa: 在 Node.js 中使用 Python

    Hello,大家好,有一段时间不见了. 这次主要给大家带来一个好东西,它的主要用途就是能让大家在 Node.js 中使用 Python 的接口和函数.可能你看到这里会好奇,会疑惑,会不解,我 Node ...

  5. 修改js文件需要重启服务器,关于Node.js中频繁修改代码重启服务器的问题

    我们可以使用一个第三方命名行工具,nodemon 来帮我们解决频繁修改代码重启服务器问题. nodemon 是一个基于 Node.jsNode.js 开发的第三方命令行工具,我们使用的时候需要独立安装 ...

  6. 如何在node.js中发出HTTP POST请求?

    如何在node.js中使用数据发出出站HTTP POST请求? #1楼 如果您使用请求库,这会变得更容易. var request = require('request');request.post( ...

  7. 如何在Node.js中退出

    用于退出的命令是什么? (即终止Node.js进程) #1楼 从命令行, .exit就是你想要的: $ node > .exit $ 它在REPL文档中有记录 . REPL(Read-Eval- ...

  8. c语言socket句柄函数传递,通过源码解析 Node.js 中进程间通信中的 socket 句柄传递...

    在 Node.js 中,当我们使用 child_process 模块创建子进程后,会返回一个 ChildProcess 类的实例,通过调用 ChildProcess#send(message[, se ...

  9. 掌握Node.js中的Async和Await

    在本文中,你将学习如何使用Node.js中的async函数(async/await)来简化callback或Promise. 异步语言结构在其他语言中已经存在了,像c#的async/await.Kot ...

最新文章

  1. 童心未泯的 YOLO 之父,小马哥 Joseph Redmon 笑傲 CV 江湖记
  2. PostgreSQL9.5和JSONB的强大功能
  3. java时间比较_广州java培训大概多久时间可以毕业
  4. python将字典写入json文件中
  5. 转软件开发过程中的各种文档
  6. 太妙了!微软670页《dotnet官方手册》火了,完整PDF开放下载!
  7. Android之IPC通信中的UID和PID识别
  8. 修改PPC下的移动运营商名称为中文
  9. 数据库笔记05:创建与管理数据库
  10. java扶贫,基于jsp的扶贫网站-JavaEE实现扶贫网站 - java项目源码
  11. mysql批量删除数据库_数据库实现批量删除数据的操作方法(代码实例)
  12. 迪士尼收购福克斯,传媒巨头江山瓦解?
  13. L3-014 周游世界 (30分)
  14. 关于电脑软件的一些实用推荐(二)
  15. 115网盘正式版评测
  16. 代码原理 webkit WebKit-利用百度siteapp开发网站App-(IOS和Android版本)
  17. 网页外挂技术浅谈(入门篇)
  18. android 时间大小排序,android collection.sort()根据时间排序list
  19. 最新十大域名注册商.com域名注册量排行榜
  20. Linux里面 update 和 upgrade 的区别

热门文章

  1. 使用Spark读取并分析二进制文件
  2. 算法之美——求两直线交点(三维叉积)——求四边形面积(二维叉积)
  3. CPU比GPU训练神经网络快十几倍,英特尔:别用矩阵运算了
  4. SMU Winter 2023 (div.2)1
  5. 谈谈个人价值及平台红利
  6. STP保护、MSTP笔记(华为)
  7. C/C++是程序员必须掌握的语言吗?
  8. 微软市值一周缩水400亿美元 相当于收购雅虎报价
  9. 通俗讲解分布式锁:场景和使用方法
  10. #个人日记-电影《哆啦A梦:伴我同行2》观后感-20210530