日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux定时任务nodejs,让Nodejs来管理定时任务later

發(fā)布時(shí)間:2024/3/12 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux定时任务nodejs,让Nodejs来管理定时任务later 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

從零開始nodejs系列文章,將介紹如何利Javascript做為服務(wù)端腳本,通過Nodejs框架web開發(fā)。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome瀏覽器就基于V8,同時(shí)打開20-30個(gè)網(wǎng)頁都很流暢。Nodejs標(biāo)準(zhǔn)的web開發(fā)框架Express,可以幫助我們迅速建立web站點(diǎn),比起PHP的開發(fā)效率更高,而且學(xué)習(xí)曲線更低。非常適合小型網(wǎng)站,個(gè)性化網(wǎng)站,我們自己的Geek網(wǎng)站!!

關(guān)于作者

張丹(Conan), 程序員Java,R,PHP,Javascript

weibo:@Conan_Z

email: bsspirit@gmail.com

前言

一個(gè)完整的系統(tǒng)少不了定時(shí)任務(wù),大多數(shù)情況我們都選用使用Linux

CRON,通過操作系統(tǒng)命令進(jìn)行定時(shí)任務(wù)。當(dāng)我們要維護(hù)多臺計(jì)算機(jī),幾十個(gè),幾百個(gè)定時(shí)任務(wù)的時(shí)候,用CRON會帶來非常大的運(yùn)維成本。可能寫到程序中,就是一個(gè)不錯(cuò)的選擇了。

Later提供了一個(gè)Nodejs的定時(shí)任務(wù)解決方案,讓我來看看他是怎么工作的吧!!

目錄

什么是定時(shí)任務(wù)?

Later介紹

Later安裝

Later基本使用

Later Schedules – 設(shè)置時(shí)間表

Later Time Periods – 時(shí)間定義和時(shí)間計(jì)算

Later Modifiers – 行為修飾符

Later Parsers – 規(guī)則解釋器

Later Occurrences – 時(shí)間控制

Later Executing – 啟動(dòng)運(yùn)行

1. 什么是定時(shí)任務(wù)?

定時(shí)任務(wù)(計(jì)劃任務(wù)),是任務(wù)在約定的時(shí)間執(zhí)行已經(jīng)計(jì)劃好的工作,這是表面的意思。在Linux中,我們經(jīng)常用到 cron

服務(wù)器來完成這項(xiàng)工作。cron服務(wù)器可以根據(jù)配置文件約定的時(shí)間來執(zhí)行特定的作務(wù)。比如我們可以在配置文件中約定每天早上4點(diǎn),對httpd

服務(wù)器重新啟動(dòng),這就是一個(gè)計(jì)劃任務(wù);

crontab文件的格式:M H D

m d cmd.

M: 分鐘(0-59)。

H:小時(shí)(0-23)。

D:天(1-31)。

m: 月(1-12)。

d: 一星期內(nèi)的天(0~6,0為星期天)。

每兩個(gè)小時(shí)

0 */2 * * * echo "Have a break now." >> /tmp/test.txt

晚上11點(diǎn)到早上8點(diǎn)之間每兩個(gè)小時(shí),早上八點(diǎn)

0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt

每個(gè)月的4號和每個(gè)禮拜的禮拜一到禮拜三的早上11點(diǎn)

0 11 4 * 1-3 command line

1月1日早上4點(diǎn)

0 4 1 1 * command line

2. Later介紹

Later是一個(gè)基于Nodejs的工具庫,用最簡單的方式執(zhí)行定時(shí)任務(wù)。Later可以運(yùn)行在Node和瀏覽器中。

3. Later安裝

Later可以運(yùn)行在Node和瀏覽器中,分別用npm和bower進(jìn)行依賴管理。關(guān)于NPM的介紹,請參考:快速創(chuàng)建基于npm的nodejs庫,

關(guān)于Bower的介紹,請參考:bower解決js的依賴管理

系統(tǒng)環(huán)境

Linux: Ubuntu 12.04.2 LTS 64bit deskop

Nodejs: npm 1.2.21

node v0.11.2

安裝later

~ cd /home/conan/nodejs

~ mkdir nodejs-later && cd nodejs-later

~ sudo npm install later

npm http GET https://registry.npmjs.org/later

npm http 200 https://registry.npmjs.org/later

npm http GET https://registry.npmjs.org/later/-/later-1.1.6.tgz

npm http 200 https://registry.npmjs.org/later/-/later-1.1.6.tgz

later@1.1.6 node_modules/later

沒有其他包的依賴,這樣就安裝完成了!

4. Later基本使用

創(chuàng)建一個(gè)每5分鐘啟動(dòng)的定時(shí)器規(guī)則,輸出啟動(dòng)時(shí)間。

創(chuàng)建啟動(dòng)文件:app.js

~ vi app.js

var later = require('later');

var sched = later.parse.text('every 5 mins'),

occurrences = later.schedule(sched).next(10);

for(var i=0;i<10;i++){

console.log(occurrences[i]);

}

運(yùn)程程序:

~ node app.js

Thu Dec 26 2013 10:45:00 GMT+0800 (CST)

Thu Dec 26 2013 10:50:00 GMT+0800 (CST)

Thu Dec 26 2013 10:55:00 GMT+0800 (CST)

Thu Dec 26 2013 11:00:00 GMT+0800 (CST)

Thu Dec 26 2013 11:05:00 GMT+0800 (CST)

Thu Dec 26 2013 11:10:00 GMT+0800 (CST)

Thu Dec 26 2013 11:15:00 GMT+0800 (CST)

Thu Dec 26 2013 11:20:00 GMT+0800 (CST)

Thu Dec 26 2013 11:25:00 GMT+0800 (CST)

Thu Dec 26 2013 11:30:00 GMT+0800 (CST)

5. Later Schedules - 設(shè)置時(shí)間表

Schedules模塊用來設(shè)置定時(shí)規(guī)則,提供3種規(guī)則設(shè)置。

Basic schedules:基本時(shí)間表

Composite schedules: 組合時(shí)間表

Exception schedules: 異常時(shí)間表

1). Basic schedules:基本時(shí)間表

設(shè)置每日10:15am ,

10:45am啟動(dòng)

var basic = {h: [10], m: [15,45]};

2). Composite schedules:

組合時(shí)間表

設(shè)置每日10:15am ,

10:45am, 和17:40pm 啟動(dòng)

var composite = [

{h: [10], m: [15,45]},

{h: [17], m: [30]}

];

3). Exception schedules:

異常時(shí)間表

用于設(shè)置一下無效的日期:設(shè)置 每年1月

和 每周一,六,日 時(shí)間表無效

var exception = [

{M: [1]},

{dw: [1,6,7]}

];

4). 程序?qū)崿F(xiàn)

新建測試文件:schedules.js

~ vi schedules.js

var later = require('later');

var basic = {h: [10], m: [15,45]};

var composite = [

basic,

{h: [17], m: [30]}

];

var exception = [

{M: [1]},

{dw: [1,6,7]}

];

var sched = {

schedules:composite,

exceptions:exception

};

later.date.localTime();

console.log("Now:"+new Date());

var occurrences = later.schedule(sched).next(10);

for(var i = 0; i < occurrences.length; i++) {

console.log(occurrences[i]);

}

運(yùn)行程序

~ node schedules.js

Now:Thu Dec 26 2013 11:40:27 GMT+0800 (CST)

Thu Dec 26 2013 17:30:00 GMT+0800 (CST)

Mon Dec 30 2013 10:15:00 GMT+0800 (CST)

Mon Dec 30 2013 10:45:00 GMT+0800 (CST)

Mon Dec 30 2013 17:30:00 GMT+0800 (CST)

Tue Dec 31 2013 10:15:00 GMT+0800 (CST)

Tue Dec 31 2013 10:45:00 GMT+0800 (CST)

Tue Dec 31 2013 17:30:00 GMT+0800 (CST)

Mon Feb 03 2014 10:15:00 GMT+0800 (CST)

Mon Feb 03 2014 10:45:00 GMT+0800 (CST)

Mon Feb 03 2014 17:30:00 GMT+0800 (CST)

當(dāng)前時(shí)間為:2013-12-26

11:40:27

從結(jié)果中看到,接下來的10個(gè)時(shí)間點(diǎn)。

第1個(gè):2013-12-26 17:30:00

第2個(gè):2013-12-30 10:15:00 (排除了2013-12-27,28,29的3天)

第8個(gè):2014-02-01 10:15:00 (排除了2014的1月份)

還有比這種方式,更便捷定義時(shí)間表的么!!太神奇了!

6. Later Time Periods - 時(shí)間定義和時(shí)間計(jì)算

Time

Periods模塊用于時(shí)間定義和時(shí)間計(jì)算。

1). 時(shí)間定義

在之前的代碼中,我們是這樣的定義的

{h: [17], m: [30]}

h代表小時(shí),m代表分鐘。

時(shí)間定義完整列表:

Second, s: 秒, 取值范圍:[0-59]

minute, m:分, 取值范圍:[0-59]

hour, h: 時(shí), 取值范圍:[0-23]

time, t: 秒每日, 取值范圍:[0-86399]

day, D: 日, 取值范圍:[1-31]

dayOfWeek, dw, d: 日每周, 取值范圍:[1-7]

dayOfYear, dy: 日每年,取值范圍:[1-365]

weekOfMonth, wm: 周每月,取值范圍:[1-5]

weekOfYear, wy: 周每年,取值范圍:[1-52]

month, M: 月,取值范圍:[1-12]

year, Y: 年,取值范圍:[1970-2099]

2). 時(shí)間計(jì)算

name: 名稱

range: 取值范圍計(jì)數(shù)

val(date): 當(dāng)前時(shí)間段的值

isValid(date, value): 檢驗(yàn)輸入是否是當(dāng)前時(shí)間段的值

extent(date): 取值范圍

start(date): 開始時(shí)間點(diǎn)

end(date): 結(jié)束時(shí)間點(diǎn)

next(date, value): value之后的時(shí)間點(diǎn)

prev(date, value): value之前的時(shí)間點(diǎn)

3). 程序?qū)崿F(xiàn)

新建測試文件:time.js

~ vi time.js

var later = require('later');

later.date.localTime();

var d = new Date();

console.log(d);

console.log(later.hour.name);

console.log(later.hour.range);

console.log(later.hour.val(d));

console.log(later.hour.isValid(d, 2));

console.log(later.hour.isValid(d, 12));

console.log(later.hour.extent());

console.log(later.hour.start(d));

console.log(later.hour.end(d));

console.log(later.hour.next(d, 5));

console.log(later.hour.prev(d, 21));

運(yùn)行程序

~ node time.js

Thu Dec 26 2013 12:30:42 GMT+0800 (CST)

hour

3600

12

false

true

[ 0, 23 ]

Thu Dec 26 2013 12:00:00 GMT+0800 (CST)

Thu Dec 26 2013 12:59:59 GMT+0800 (CST)

Fri Dec 27 2013 05:00:00 GMT+0800 (CST)

Wed Dec 25 2013 21:59:59 GMT+0800 (CST)

輸出結(jié)果的解釋:

當(dāng)前時(shí)間:2013-12-26 12:30:42

以小時(shí)定義時(shí)間

每小時(shí)3600個(gè)計(jì)數(shù)點(diǎn)

當(dāng)前時(shí)間段的的值是12

檢查2不是當(dāng)前時(shí)間段的值

檢查12不是當(dāng)前時(shí)間段的值

取值范圍[0,23]

當(dāng)前時(shí)間段的開始時(shí)間點(diǎn):12:00:00

當(dāng)前時(shí)間段的結(jié)束時(shí)間點(diǎn):12:59:59

下一個(gè)周期第5個(gè)時(shí)間段開始點(diǎn):2013-12-27 05:00:00

上一個(gè)周期第21個(gè)時(shí)間段結(jié)束點(diǎn):2013-12-25 21:59:59

7. Later Modifiers - 行為修飾符

Later可以編寫自定義修飾符,可以改變現(xiàn)有的時(shí)間周期的行為,通過 _(modifier-id) 這樣的格式定義。

after(_a): 之后時(shí)間修飾符

before(_b): 之前時(shí)間修飾符

1). after(_a)

以小時(shí)定義,設(shè)置17:00pm之前都是合法的時(shí)間

var demo1_a = {schedules: [{h_a: [17]}]};

#等價(jià)定義

var demo1 = {schedules: [{h: [17,18,19,20,21,22,23]}]};

2). before(_b)

以小時(shí)定義,設(shè)置17:00pm之后都是合法的時(shí)間

var demo2_b = {schedules: [{h_b: [17]}]};

#等價(jià)定義

var demo2 = {schedules: [{h: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}]};

3). 程序?qū)崿F(xiàn)

新建文件:modifiers.js

~ vi modifiers.js

var later = require('later');

later.date.localTime();

console.log("Now:"+new Date());

var demo1_a = {schedules: [{h_a: [17]}]};

var demo2_b = {schedules: [{h_b: [17]}]};

var occurrences = later.schedule(demo1_a).next(3);

for(var i = 0; i < occurrences.length; i++) {

console.log(occurrences[i]);

}

occurrences = later.schedule(demo2_b).next(3);

for(var i = 0; i < occurrences.length; i++) {

console.log(occurrences[i]);

}

運(yùn)行程序

~ node modifiers.js

Now:Thu Dec 26 2013 13:04:06 GMT+0800 (CST)

Thu Dec 26 2013 17:00:00 GMT+0800 (CST)

Thu Dec 26 2013 18:00:00 GMT+0800 (CST)

Thu Dec 26 2013 19:00:00 GMT+0800 (CST)

Thu Dec 26 2013 13:04:06 GMT+0800 (CST)

Thu Dec 26 2013 14:00:00 GMT+0800 (CST)

Thu Dec 26 2013 15:00:00 GMT+0800 (CST)

當(dāng)前時(shí)間:2013-12-26

13:04:06

17點(diǎn)后的時(shí)間表(h_a):17:00:00

17點(diǎn)前的時(shí)間表(h_b):13:04:06

Later支持我們可以定義自己的修飾符,有興趣的同學(xué)自己查文檔吧。

8. Later Parsers - 規(guī)則解釋器

Parsers模塊提供了3種規(guī)則解釋器,方便定義時(shí)間表。

Recur: 鏈?zhǔn)紸PI定義

Cron Parser: CRON格式定義

Text Parser:自然語言定義

1). Recur: 鏈?zhǔn)紸PI定義

設(shè)置每小時(shí)第5分0秒啟動(dòng)

var sched = later.parse.recur().on(5).minute();

時(shí)間定義API

second();

minute();

hour();

time();

dayOfWeek();

dayOfWeekCount();

dayOfMonth();

dayOfYear();

weekOfMonth();

weekOfYear();

month();

year();

時(shí)間計(jì)算API

on(vals): 設(shè)置時(shí)間值

first(): 最小的時(shí)間值

last(): 最大的時(shí)間值

onWeekend(): 周末,等價(jià)于on(1,7).dayOfWeek()

onWeekday(): 工作日,等價(jià)于on(2,3,4,5,6).dayOfWeek()

every(val): 循環(huán)每個(gè)時(shí)間

after(val): 在之后

before(val): 在之前

startingOn(val): 每個(gè)時(shí)間段開始的偏移量

between(start, end): 在兩個(gè)時(shí)間之間

and():

except():

customPeriod(id):

customModifier(id, vals):

2). Cron Parser: CRON格式定義

通過原CRON格式進(jìn)行定義。

設(shè)置每小時(shí)第5分0秒啟動(dòng)

var cron = later.parse.cron('5 * * * *');

3). Text Parser:自然語言定義

通過關(guān)鍵字格式進(jìn)行定義。

var text = later.parse.text('every 5th mins');

9. Later Occurrences - 時(shí)間控制

時(shí)區(qū)設(shè)置

//默認(rèn)UTF時(shí)區(qū)

later.date.UTC();

//設(shè)置本地時(shí)區(qū)

later.date.localTime();

構(gòu)造對象

var schedule = {schedules: [{m: [5]}]};

var occurrences = later.schedule(schedule);

時(shí)間控制API

later.schedule(schedule).next(count, start, end): 取下N個(gè)有效時(shí)間點(diǎn)

later.schedule(schedule).prev(count, start, end): 取上N個(gè)有效時(shí)間點(diǎn)

later.schedule(schedule).nextRange(count, start, end):

取下N個(gè)有效時(shí)間段

later.schedule(schedule).prevRange(count, start, end):

取上N個(gè)有效時(shí)間段

10. Later Executing - 啟動(dòng)運(yùn)行

Executing模塊定義了setTimeout和setInterval兩種方式,實(shí)現(xiàn)運(yùn)行。

setTimeout: 設(shè)置一段時(shí)間后運(yùn)行,只運(yùn)行1次

setInterval: 循環(huán)運(yùn)行,直到clear

1). setTimeout

定義:5秒后運(yùn)行,只運(yùn)行一次!

新建文件:settimeout.js

~ vi settimeout.js

var later = require('later');

later.date.localTime();

console.log("Now:"+new Date());

var sched = later.parse.recur().every(5).second(),

t = later.setTimeout(function() {

test(5);

}, sched);

function test(val) {

console.log(new Date());

console.log(val);

}

運(yùn)行程序

~ node settimeout.js

Now:Thu Dec 26 2013 14:12:36 GMT+0800 (CST)

Thu Dec 26 2013 14:12:40 GMT+0800 (CST)

5

2). setInterval

定義:2秒后運(yùn)行,循環(huán)運(yùn)行,直到15秒后,clear停止!

新建文件:setinterval.js

~ vi setInterval.js

var later = require('later');

later.date.localTime();

console.log("Now:"+new Date());

var sched = later.parse.recur().every(2).second(),

t = later.setInterval(function() {

test(Math.random(10));

}, sched);

function test(val) {

console.log(new Date());

console.log(val);

}

setTimeout(function(){

t.clear();

console.log("Clear");

},15*1000);

運(yùn)行程序

~ node setinterval.js

Now:Thu Dec 26 2013 14:17:54 GMT+0800 (CST)

Thu Dec 26 2013 14:17:56 GMT+0800 (CST)

0.5084630874916911

Thu Dec 26 2013 14:17:58 GMT+0800 (CST)

0.47506075259298086

Thu Dec 26 2013 14:18:00 GMT+0800 (CST)

0.957129133399576

Thu Dec 26 2013 14:18:02 GMT+0800 (CST)

0.7480122991837561

Thu Dec 26 2013 14:18:04 GMT+0800 (CST)

0.9212428922764957

Thu Dec 26 2013 14:18:06 GMT+0800 (CST)

0.030472515616565943

Thu Dec 26 2013 14:18:08 GMT+0800 (CST)

0.9528024469036609

Clear

總結(jié)

以上是生活随笔為你收集整理的linux定时任务nodejs,让Nodejs来管理定时任务later的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。