Node Schedule文檔翻譯

用到了這個(gè)工具雅镊,順便翻譯一下,便于查看
github看的舒服一點(diǎn):https://github.com/ZZES-ZVD/node-schedule
原始地址:https://github.com/node-schedule/node-schedule

Node Schedule 是一個(gè)Node.js的靈活的類似cron又不類似的任務(wù)調(diào)度庫.它允許你調(diào)度任務(wù)(任意函數(shù))在特殊的日期執(zhí)行孽惰,并循環(huán)執(zhí)行。他只在在任何給定的時(shí)間里使用一個(gè)定時(shí)器(而不是每隔一秒/一分鐘來重新判斷將要執(zhí)行的任務(wù))

使用

安裝

你可以使用 npm.

npm install node-schedule

概述

Node Schedule 是一個(gè)基于時(shí)間的調(diào)度因俐,而不是基于區(qū)間的調(diào)度化借。你可以很容易的讓他按照你的意思來干活,比如帜乞,你說“每五分鐘來運(yùn)行這個(gè)函數(shù)"司抱,你將發(fā)現(xiàn)setInterval要更容易使用,也是更適合的黎烈。但是如果你想說"運(yùn)行這個(gè)函數(shù)在每個(gè)月的第三個(gè)星期二每個(gè)小時(shí)的20分和50分"习柠,你會(huì)發(fā)現(xiàn)你更想要Node Schedule組件。此外照棋,Node Schedule 支持windows系統(tǒng)资溃,不像cron并不支持。

注意 Node Schedule 是被設(shè)計(jì)來進(jìn)行進(jìn)程內(nèi)調(diào)度烈炭,也就是說調(diào)度任務(wù)只能在你的腳本運(yùn)行時(shí)才能有效以及調(diào)度將在執(zhí)行成功后消失溶锭。如果你需要在你腳步 運(yùn)行的時(shí)候調(diào)度任務(wù),那就需要考慮使用cron.

任務(wù)和調(diào)度

每個(gè)在Node Schedule的計(jì)劃任務(wù)都會(huì)被一個(gè)Job對象所代表符隙,你可手動(dòng)創(chuàng)建任務(wù)趴捅,然后執(zhí)行 schedule()方法來應(yīng)用一個(gè)計(jì)劃垫毙,或者使用一個(gè)方便的方法ScheduleJob() 就像下面要說的。

Job 對象是 事件觸發(fā)器,觸發(fā)一個(gè) run 事件在每次執(zhí)行之后驻售。
他們也觸發(fā)一個(gè)scheduled事件露久,在每次他們調(diào)度運(yùn)行的時(shí)候,
canceled事件可以讓一個(gè)調(diào)用在它執(zhí)行之前被取消(這兩個(gè)事件都接受一個(gè)JavaScript日期對象作為一個(gè)參數(shù)). 注意這個(gè)任務(wù)會(huì)第一時(shí)間被調(diào)度欺栗,所以如果你使用 scheduleJob()這個(gè)方便的方法來創(chuàng)建一個(gè)任務(wù),你將錯(cuò)過第一個(gè)scheduled事件征峦,但是你能手動(dòng)查詢調(diào)用(下面會(huì)有)迟几。也要注意 canceled 是單L美式拼寫方法

Cron風(fēng)格的調(diào)度

cron的格式組成如下:

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

cron格式的例子:

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

var j = schedule.scheduleJob('42 * * * *', function(){
  console.log('生命,宇宙栏笆,一切的答案类腮。。蛉加。!');
});

當(dāng)分鐘為42時(shí)蚜枢,執(zhí)行一個(gè)cron任務(wù)(例如 19:42, 20:42, etc.).

以及:

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

每五分鐘執(zhí)行一個(gè)cron任務(wù) = */5 * * * *

不支持的cron特性

一般的, W (最近的工作日), L (一個(gè)月/星期的最后一天), 以及 # (月的第n個(gè)星期) 是不支持的. 大多數(shù)流行的cron特性應(yīng)該都能工作。

cron-parser 用來解析crontab指令

基于日期的調(diào)度

就是說你特別想要一個(gè)函數(shù)在 2012年12月12日早上5:30執(zhí)行针饥。
記住在JavaScript中- 0 - 星期一, 11 - 十二月.(意思就是星期數(shù)和月份數(shù)都是從0開始計(jì)數(shù)的)

var schedule = require('node-schedule');
var date = new Date(2012, 11, 21, 5, 30, 0);

var j = schedule.scheduleJob(date, function(){
  console.log('世界將在今天走向 結(jié)束.');
});

要在未來使用當(dāng)前數(shù)據(jù)厂抽,你可以使用綁定:

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';

當(dāng)調(diào)度的任務(wù)運(yùn)行時(shí),這個(gè)將會(huì)打印出'Tada!'丁眼,而不是 'Changing Data'筷凤,
這個(gè)x會(huì)在調(diào)度后立即更改.

遞歸循環(huán)規(guī)則調(diào)度

你可以創(chuàng)建遞歸規(guī)則來指定任務(wù)在何時(shí)重新調(diào)用。舉個(gè)例子苞七,考慮這個(gè)規(guī)則藐守,將在每個(gè)小時(shí)的第42分鐘執(zhí)行函數(shù):

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

var rule = new schedule.RecurrenceRule();
rule.minute = 42;

var j = schedule.scheduleJob(rule, function(){
  console.log('生命,宇宙蹂风,一切的答案卢厂。。惠啄。!');
});

你也可以使用數(shù)組來指定一個(gè)允許值的列表,Range
對象來指定一個(gè)系列的開始值和結(jié)束值慎恒,帶有可選的步驟參數(shù)。舉個(gè)例子礁阁,這個(gè)將在星期4巧号,星期5,星期6和星期天的下午五點(diǎn)答應(yīng)一個(gè)信息:

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了!');
});

遞歸規(guī)則的屬性

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

注意: 值得注意的時(shí)遞歸規(guī)則的默認(rèn)的第一個(gè)屬性是null (除了第二個(gè),對于熟悉cron姥闭,知道默認(rèn)為0). 如果我們之前沒有明確地設(shè)定minute為0, 信息將會(huì)在下面時(shí)間打印 5:00pm, 5:01pm, 5:02pm, ..., 5:59pm. 或許這不是你想要的.

對象字面化語法

讓事情變得簡單一點(diǎn)丹鸿,一個(gè)對象字面化語法也是支持的,就像這個(gè)例子棚品,將會(huì)在每個(gè)星期天的下午兩點(diǎn)半打印信息:

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

設(shè)置開始時(shí)間和結(jié)束時(shí)間

這個(gè)例子中靠欢,它將在五秒后開始廊敌,然后十秒后結(jié)束.和之前一樣支持規(guī)則。

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('到了喝茶時(shí)間!');
});

處理任務(wù)和任務(wù)調(diào)度

這兒有一些函數(shù)來從一個(gè)任務(wù)中獲取信息以及處理任務(wù)和調(diào)度

job.cancel(reshedule)

你可以讓任何任務(wù)失效门怪,使用 cancel() 方法:

j.cancel();

所有的計(jì)劃調(diào)用將會(huì)被取消骡澈。當(dāng)你設(shè)置 reschedule 參數(shù)為true,然后任務(wù)將在之后重新排列掷空。

job.cancelNext(reshedule)

這個(gè)方法將能將能取消下一個(gè)計(jì)劃的調(diào)度或者任務(wù).
當(dāng)你設(shè)置 reschedule 參數(shù)為true肋殴,然后任務(wù)將在之后重新排列。

job.reschedule(spec)

這個(gè)方法將取消所有掛起的調(diào)度坦弟,然后使用給定的規(guī)則重新注冊任務(wù).
將返回 true/false 來說明成功/失敗.

job.nextInvocation()

這個(gè)方法返回一個(gè)日期對象為這個(gè)任務(wù)的下一次調(diào)用計(jì)劃护锤,如果沒有調(diào)度安排,則返回null.

貢獻(xiàn)

這個(gè)模塊由 Matt Patenaude 最初開發(fā), 現(xiàn)在由
Tejas Manohar 和 [其他貢獻(xiàn)者] 維護(hù).

我們非常希望得到你的貢獻(xiàn). 做出有意義的和有價(jià)值貢獻(xiàn)的人酿傍,將會(huì)被給予貢獻(xiàn)的權(quán)限在他們認(rèn)為合適的地方做出貢獻(xiàn).

在跳過之前, 檢查我們[貢獻(xiàn)]向?qū)ы撁?

Copyright and license

Copyright 2015 Matt Patenaude.

Licensed under the MIT License.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烙懦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赤炒,更是在濱河造成了極大的恐慌氯析,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莺褒,死亡現(xiàn)場離奇詭異掩缓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)癣朗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門拾因,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旷余,你說我怎么就攤上這事绢记。” “怎么了正卧?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵蠢熄,是天一觀的道長。 經(jīng)常有香客問我炉旷,道長签孔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任窘行,我火速辦了婚禮饥追,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罐盔。我一直安慰自己但绕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捏顺,像睡著了一般六孵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幅骄,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天劫窒,我揣著相機(jī)與錄音,去河邊找鬼拆座。 笑死主巍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懂拾。 我是一名探鬼主播煤禽,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼岖赋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瓮孙,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對情侶失蹤唐断,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后杭抠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脸甘,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年偏灿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丹诀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翁垂,死狀恐怖铆遭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沿猜,我是刑警寧澤枚荣,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站啼肩,受9級(jí)特大地震影響橄妆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祈坠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一害碾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赦拘,春花似錦慌随、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽花嘶。三九已至,卻和暖如春蹦漠,著一層夾襖步出監(jiān)牢的瞬間椭员,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工笛园, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隘击,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓研铆,卻偏偏與公主長得像埋同,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子棵红,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容