1. 程式人生 > >Nodejs 定時執行(node-cron)

Nodejs 定時執行(node-cron)

遇到個需求要定時清理某個map, 一個setInterval實現感覺太皮,肯定會翻車。所以去萬能的npm上去摸工具。搜尋一下schedule,出現一個node-cron模組。看起來有很多人用,嗯….就用這個了。

Npm 文件:https://www.npmjs.com/package/cron

文章目錄

1 安裝

npm install cron

測試code:

var CronJob = require('cron').CronJob;
new CronJob('* * * * * *', function() {
  console.log('You will see this message every second');
}, null, true, 'America/Los_Angeles');

2 使用

2.1 API

constructor(cronTime, onTick, onComplete, start, timezone, context, runOnInit, unrefTimeout)
  • cronTime [必需] 配置定時任務的時間,可以使用這可以是cron語法或JS Date物件的形式。
  • onTick [必需]在指定時間觸發的回撥。
  • onComplete [可選] 在作業停止時將觸發的回撥。
  • Start [可選]指定是否在退出建構函式之前啟動作業,預設情況下,此值設定為false。
  • timeZone [可選] -指定執行的時區。這將修改相對於您的時區的實際時間 ,不設定為當前所在時區。設定為Europe/London 為UTC 0時區

2.2 cronTime時間語法

官方文件:http://crontab.org/

此模組中中cron有一定的差異,時間取值範圍,且有六個欄位,其中1秒是最精細的粒度。:

秒:0-59
分鐘:0-59
小時:0-23
天:1-31
月份:0-11(1月至12月)
星期幾:0-6(週日至週六)

排列順序:
秒 分鐘 小時 天 月份 星期幾

*為萬用字元
-為時間段連線符
,號為分隔符,可以在某一節輸入多個值
/號為步進符

2.1.1 在指定時刻執行(定時)

從1中例子可以看到*為通配 ,意思均滿足。

* * * * * *

意思為均通配,導致結果就是每秒都執行

比如要在每次分鐘時間為10的時候執行:

* 10 * * * *

執行結果是 每次分鐘為10的 那60秒 每秒都執行。

'10 03 * * * *'

執行結果為在秒為10 分鐘為3執行

'10 05 14 * * *'

執行結果為每天14點05分10秒時執行語句

'10 05 14-17 * * *'

執行結果為每天14-17點的05分10秒時執行語句。(-操作符支援選擇時間端)

'11,22,25 * * * * *'

執行結果為每分鐘的11 秒 22秒 25秒執行。(支援分隔)

2.1.2 間隔多少時間執行(迴圈)

我們可以使用萬用字元和/步進符實現間隔多長時間執行

*/3 * * * * *

間隔3秒執行

* */2 * * * *

間隔兩份中執行

2.3 sample

2.3.1 在每分鐘第10秒執行

var CronJob = require('cron').CronJob;
new CronJob('10 * * * * *', function() {
    const d = new Date();
	console.log(d);
}, null, true);

輸出

2018-11-08T06:18:10.010Z
2018-11-08T06:19:10.004Z

2.3.1 間隔10秒執行

var CronJob = require('cron').CronJob;
new CronJob('*/10 * * * * *', function() {
    const d = new Date();
	console.log(d);
}, null, true);```
輸出

    2018-11-08T06:19:30.008Z
    2018-11-08T06:19:40.001Z
    2018-11-08T06:19:50.001Z