node-schedule

Node Schedule 是一个Node.js的灵活的类似cron又不类似的任务调度库.它允许你调度任务(任意函数)在特殊的日期执行,并循环执行。他只在在任何给定的时间里使用一个定时器(而不是每隔一秒/一分钟来重新判断将要执行的任务)

使用

安装

你可以使用 npm.

npm install node-schedule

概述

node-schedule 是一个基于时间的调度,而不是基于区间的调度。你可以很容易的让他按照你的意思来干活,比如,你说“每五分钟来运行这个函数",你将发现setInterval要更容易使用,也是更适合的。但是如果你想说"运行这个函数在每个月的第三个星期二每个小时的20分和50分",你会发现你更想要Node Schedule组件。此外,Node Schedule 支持windows系统,不像cron并不支持。

注意 Node Schedule 是被设计来进行进程内调度,也就是说调度任务只能在你的脚本运行时才能有效以及调度将在执行成功后消失。如果你需要在你脚步 运行的时候调度任务,那就需要考虑使用cron.

任务和调度

每个在Node Schedule的计划任务都会被一个Job对象所代表,你可手动创建任务,然后执行 schedule()方法来应用一个计划,或者使用一个方便的方法ScheduleJob() 就像下面要说的。

Job 对象是 事件触发器,触发一个 run 事件在每次执行之后。
他们也触发一个scheduled事件,在每次他们调度运行的时候,
canceled事件可以让一个调用在它执行之前被取消(这两个事件都接受一个JavaScript日期对象作为一个参数). 注意这个任务会第一时间被调度,所以如果你使用 scheduleJob()这个方便的方法来创建一个任务,你将错过第一个scheduled事件,但是你能手动查询调用(下面会有)。也要注意 canceled 是单L美式拼写方法

Cron风格的调度

cron的格式组成如下:

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    |
│    │    │    │    │    └ 一周的星期 (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── 月份 (1 - 12)
│    │    │    └────────── 月份中的日子 (1 - 31)
│    │    └─────────────── 小时 (0 - 23)
│    └──────────────────── 分钟 (0 - 59)
└───────────────────────── 秒 (0 - 59, OPTIONAL)

cron格式的例子:

var schedule = require('node-schedule');var j = schedule.scheduleJob('42 * * * *', function(){console.log('生命,宇宙,一切的答案。。。!');
});

当分钟为42时,执行一个cron任务(例如 19:42, 20:42, etc.).

以及:

var j = schedule.scheduleJob('0 17 ? * 0,4-6', function(){console.log('今天被ren认出来了!');
});

每五分钟执行一个cron任务 = */5 * * * *

不支持的cron特性

一般的, W (最近的工作日), L (一个月/星期的最后一天), 以及 # (月的第n个星期) 是不支持的. 大多数流行的cron特性应该都能工作。

cron-parser 用来解析crontab指令

基于日期的调度

就是说你特别想要一个函数在 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会在调度后立即更改.

递归循环规则调度

你可以创建递归规则来指定任务在何时重新调用。举个例子,考虑这个规则,将在每个小时的第42分钟执行函数:

var schedule = require('node-schedule');var rule = new schedule.RecurrenceRule();
rule.minute = 42;var j = schedule.scheduleJob(rule, function(){console.log('生命,宇宙,一切的答案。。。!');
});

你也可以使用数组来指定一个允许值的列表,Range
对象来指定一个系列的开始值和结束值,带有可选的步骤参数。举个例子,这个将在星期4,星期5,星期6和星期天的下午五点答应一个信息:

var rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0, new schedule.Range(4, 6)];
rule.hour = 17;
rule.minute = 0;var j = schedule.scheduleJob(rule, function(){console.log('今天我碰到klren了!');
});

递归规则的属性

  • second
  • minute
  • hour
  • date
  • month
  • year
  • dayOfWeek

注意: 值得注意的时递归规则的默认的第一个属性是null (除了第二个,对于熟悉cron,知道默认为0). 如果我们之前没有明确地设定minute为0, 信息将会在下面时间打印 5:00pm, 5:01pm, 5:02pm, …, 5:59pm. 或许这不是你想要的.

对象字面化语法

让事情变得简单一点,一个对象字面化语法也是支持的,就像这个例子,将会在每个星期天的下午两点半打印信息:

var j = schedule.scheduleJob({hour: 14, minute: 30, dayOfWeek: 0}, function(){console.log('到了喝茶的时间!');
});

设置开始时间和结束时间

这个例子中,它将在五秒后开始,然后十秒后结束.和之前一样支持规则。

let startTime = new Date(Date.now() + 5000);
let endTime = new Date(startTime.getTime() + 5000);
var j = schedule.scheduleJob({ start: startTime, end: endTime, rule: '*/1 * * * * *' }, function(){console.log('到了喝茶时间!');
});

处理任务和任务调度

这儿有一些函数来从一个任务中获取信息以及处理任务和调度

job.cancel(reshedule)

你可以让任何任务失效,使用 cancel() 方法:

j.cancel();

所有的计划调用将会被取消。当你设置 reschedule 参数为true,然后任务将在之后重新排列。

job.cancelNext(reshedule)

这个方法将能将能取消下一个计划的调度或者任务.
当你设置 reschedule 参数为true,然后任务将在之后重新排列。

job.reschedule(spec)

这个方法将取消所有挂起的调度,然后使用给定的规则重新注册任务.
将返回 true/false 来说明成功/失败.

job.nextInvocation()

这个方法返回一个日期对象为这个任务的下一次调用计划,如果没有调度安排,则返回null.

贡献

这个模块由 Matt Patenaude 最初开发, 现在由
Tejas Manohar 和 [其他贡献者] 维护.

我们非常希望得到你的贡献. 做出有意义的和有价值贡献的人,将会被给予贡献的权限在他们认为合适的地方做出贡献.

在跳过之前, 检查我们[贡献]向导页面!

Copyright and license

Copyright 2015 Matt Patenaude.

Licensed under the [MIT License] license.

node-schedule使用介绍相关推荐

  1. (8)Node.js 模块介绍

    一.Node.js模块介绍 模块(包)是 Node.js 中具有特定功能的对象. 二.web浏览器端和Node端的对比图 我们通过如上图可以看到,再web浏览器端的基本语法,再Node端也能使用,但是 ...

  2. Node.js 发展史介绍与安装初体验

    点击上方蓝字关注我们 关于作者 作者简介: 公众号:Flowlet 最近打算做一个个人的Blog系统,用于技术交流与个人主页展示,起初打算通过Wordpress+VPS部署在云上,后来看了下腾讯云CV ...

  3. node.js的介绍

    [编者按]:Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企 ...

  4. 【学习笔记】node.js基础介绍

    Node.js的基本概念 Node.js是编写高性能网络服务器的Javascript工具包(用JS开发服务端程序). 特点:单线程.异步.事件驱动: 举个Apache服务器运行方式的例子,比如线程池里 ...

  5. Node 之NPM介绍

    NPM是Node.js的包管理工具,Node.js与NPM的关系密不可分的 NPM常用的命令: 验证npm是否安装: 1.npm -v,npm version 通过输入npm-v命令或者npm ver ...

  6. 【node】-----简单介绍 nodejs

    概念 1. Node.js是一个基于Chrome V8引擎的javascipt的运行环境.2. Node.js使用了一个事件驱动.非阻塞I/O的模型,3. Node.js轻量又高效,能够使我们在本地运 ...

  7. 无涯教程:Node.js - Streams介绍

    无涯教程网:Stream流是使您可以连续地从源读取数据或将数据写入目标的对象,在Node.js中,有四种类型的流- Readable   -  用于读取操作的流. Writable    -  用于写 ...

  8. RabbitMQ中的cluster、mirrored queue,以及 warrens机制、RAM node、disk node及vhost介绍

    1.RAM node和disk node的区别? RAM node仅将fabric(即queue.exchange和binding等RabbitMQ基础构件)相关元数据保存到内存中,但disk nod ...

  9. node之Path介绍

    path 为 Node.js 常用的内置 npm 模块,主要为了更加方便的处理文件与目录路径,通常可通过 const path = require('path') 引用. Windows vs. PO ...

  10. node安装和配置(node-v12.20.2-x64 ) 以及node版本切换介绍

    一.node的安装(可以去文末直接安装nvm管理器,就不用配置了) 1    下载 | Node.js,也可以下载以往版本,window是以msi结尾的文件 2   安装,直接一直安装就行,如果有之前 ...

最新文章

  1. 通俗理解注意力机制中的Q、K和V表示的具体含义
  2. bzoj-3288 3288: Mato矩阵(数论)
  3. leetcode 21 Merge Two Sorted Lists
  4. umask:默认权限分配的命令
  5. java中面向对象_java中的面向对象
  6. Linux 比特币Bitcoin采集节点搭建
  7. Scrapy中的Spider
  8. 新浪微博 sso 登录 iOS遇到的几个问题
  9. VS2010 SP1 编译QT4.8.0 x64版本
  10. 模仿老乡鸡点餐小程序选择门店功能
  11. “水晶糖果字体”练习
  12. 苹果电脑系统重装 —— U盘操作
  13. win7首次使用计算机,首次安装win7系统如何进行硬盘分区
  14. 一道被称为“神题”的试题之求熊是什么颜色的
  15. 学习推荐《零起点Python大数据与量化交易》中文PDF+源代码
  16. 肿瘤特异性抗原行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  17. XE3随笔18:实例 - 解析 Google 关键字搜索排名
  18. 第15.33节 PyQt(Python+Qt)入门学习:containers容器类部件QTabWidget选项窗部件简介
  19. 模态窗口showModalDialog的浏览器兼容解决方案
  20. CRM软件哪个好?国内外6大顶级CRM软件盘点

热门文章

  1. 简单Chrome脚本 自动跳过b站视频播放结束后的的充电鸣谢页面
  2. Linux上打包软件
  3. OpenAI提交GPT-5商标申请;韩国室温超导团队称论文存在缺陷,已要求下架;Nim v2.0释出 | 极客头条
  4. 备份转贴:英文地址写法
  5. slidedown和slideup 的重复滑动问题
  6. ChatGPT做2023高考数学卷子。
  7. 盘点十五种容易成女光棍的大学女生
  8. java list 内存释放_java集合ArrayList中clear方法内存释放分析
  9. CAD二次开发技术 好辛苦啊!
  10. 出现另一个程序正在使用此文件,进程无法访问。 (异常来自 HRESULT:0x80070020)错误的解决办法