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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

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

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

關于作者

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

weibo:@Conan_Z

email: bsspirit@gmail.com

前言

一個完整的系統少不了定時任務,大多數情況我們都選用使用Linux

CRON,通過操作系統命令進行定時任務。當我們要維護多臺計算機,幾十個,幾百個定時任務的時候,用CRON會帶來非常大的運維成本。可能寫到程序中,就是一個不錯的選擇了。

Later提供了一個Nodejs的定時任務解決方案,讓我來看看他是怎么工作的吧!!

目錄

什么是定時任務?

Later介紹

Later安裝

Later基本使用

Later Schedules – 設置時間表

Later Time Periods – 時間定義和時間計算

Later Modifiers – 行為修飾符

Later Parsers – 規則解釋器

Later Occurrences – 時間控制

Later Executing – 啟動運行

1. 什么是定時任務?

定時任務(計劃任務),是任務在約定的時間執行已經計劃好的工作,這是表面的意思。在Linux中,我們經常用到 cron

服務器來完成這項工作。cron服務器可以根據配置文件約定的時間來執行特定的作務。比如我們可以在配置文件中約定每天早上4點,對httpd

服務器重新啟動,這就是一個計劃任務;

crontab文件的格式:M H D

m d cmd.

M: 分鐘(0-59)。

H:小時(0-23)。

D:天(1-31)。

m: 月(1-12)。

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

每兩個小時

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

晚上11點到早上8點之間每兩個小時,早上八點

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

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點

0 11 4 * 1-3 command line

1月1日早上4點

0 4 1 1 * command line

2. Later介紹

Later是一個基于Nodejs的工具庫,用最簡單的方式執行定時任務。Later可以運行在Node和瀏覽器中。

3. Later安裝

Later可以運行在Node和瀏覽器中,分別用npm和bower進行依賴管理。關于NPM的介紹,請參考:快速創建基于npm的nodejs庫,

關于Bower的介紹,請參考:bower解決js的依賴管理

系統環境

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基本使用

創建一個每5分鐘啟動的定時器規則,輸出啟動時間。

創建啟動文件: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]);

}

運程程序:

~ 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 - 設置時間表

Schedules模塊用來設置定時規則,提供3種規則設置。

Basic schedules:基本時間表

Composite schedules: 組合時間表

Exception schedules: 異常時間表

1). Basic schedules:基本時間表

設置每日10:15am ,

10:45am啟動

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

2). Composite schedules:

組合時間表

設置每日10:15am ,

10:45am, 和17:40pm 啟動

var composite = [

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

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

];

3). Exception schedules:

異常時間表

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

和 每周一,六,日 時間表無效

var exception = [

{M: [1]},

{dw: [1,6,7]}

];

4). 程序實現

新建測試文件: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]);

}

運行程序

~ 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)

當前時間為:2013-12-26

11:40:27

從結果中看到,接下來的10個時間點。

第1個:2013-12-26 17:30:00

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

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

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

6. Later Time Periods - 時間定義和時間計算

Time

Periods模塊用于時間定義和時間計算。

1). 時間定義

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

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

h代表小時,m代表分鐘。

時間定義完整列表:

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

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

hour, h: 時, 取值范圍:[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). 時間計算

name: 名稱

range: 取值范圍計數

val(date): 當前時間段的值

isValid(date, value): 檢驗輸入是否是當前時間段的值

extent(date): 取值范圍

start(date): 開始時間點

end(date): 結束時間點

next(date, value): value之后的時間點

prev(date, value): value之前的時間點

3). 程序實現

新建測試文件: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));

運行程序

~ 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)

輸出結果的解釋:

當前時間:2013-12-26 12:30:42

以小時定義時間

每小時3600個計數點

當前時間段的的值是12

檢查2不是當前時間段的值

檢查12不是當前時間段的值

取值范圍[0,23]

當前時間段的開始時間點:12:00:00

當前時間段的結束時間點:12:59:59

下一個周期第5個時間段開始點:2013-12-27 05:00:00

上一個周期第21個時間段結束點:2013-12-25 21:59:59

7. Later Modifiers - 行為修飾符

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

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

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

1). after(_a)

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

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

#等價定義

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

2). before(_b)

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

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

#等價定義

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

3). 程序實現

新建文件: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]);

}

運行程序

~ 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)

當前時間:2013-12-26

13:04:06

17點后的時間表(h_a):17:00:00

17點前的時間表(h_b):13:04:06

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

8. Later Parsers - 規則解釋器

Parsers模塊提供了3種規則解釋器,方便定義時間表。

Recur: 鏈式API定義

Cron Parser: CRON格式定義

Text Parser:自然語言定義

1). Recur: 鏈式API定義

設置每小時第5分0秒啟動

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

時間定義API

second();

minute();

hour();

time();

dayOfWeek();

dayOfWeekCount();

dayOfMonth();

dayOfYear();

weekOfMonth();

weekOfYear();

month();

year();

時間計算API

on(vals): 設置時間值

first(): 最小的時間值

last(): 最大的時間值

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

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

every(val): 循環每個時間

after(val): 在之后

before(val): 在之前

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

between(start, end): 在兩個時間之間

and():

except():

customPeriod(id):

customModifier(id, vals):

2). Cron Parser: CRON格式定義

通過原CRON格式進行定義。

設置每小時第5分0秒啟動

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

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

通過關鍵字格式進行定義。

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

9. Later Occurrences - 時間控制

時區設置

//默認UTF時區

later.date.UTC();

//設置本地時區

later.date.localTime();

構造對象

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

var occurrences = later.schedule(schedule);

時間控制API

later.schedule(schedule).next(count, start, end): 取下N個有效時間點

later.schedule(schedule).prev(count, start, end): 取上N個有效時間點

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

取下N個有效時間段

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

取上N個有效時間段

10. Later Executing - 啟動運行

Executing模塊定義了setTimeout和setInterval兩種方式,實現運行。

setTimeout: 設置一段時間后運行,只運行1次

setInterval: 循環運行,直到clear

1). setTimeout

定義:5秒后運行,只運行一次!

新建文件: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);

}

運行程序

~ 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秒后運行,循環運行,直到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);

運行程序

~ 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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。