常常我們在工作時會需要排程跑一些任務例如每天半夜需要跑統計報表,或是批量更新抓取資料之類的,一些比較例行性的工作,或是未來可預期的工作。
這種時候就可以使用今天要提到的這個工具 node-cron
一般來說如果我們要解決上述的問題,以前很常見的做法是使用 linux 系統內建的 crontab 指令來達到這件事。
可以參考以下這篇 LI-EDWARD 大大的文章。
在 crontab 中設定 cron-express,可以讓我們在想要的時間,觸發直接執行腳本或直接用 wget 指令來打 http endpoint 來直接執行 api 邏輯。
0 0 * * * /home/ubuntu/script.sh //每天凌晨 00:00 執行腳本 script.sh
但以上做法有什麼缺點呢?
今天假設我們所執行的業務邏輯是跟服務綁定再一起的時候,假設服務進行遷移或是 endpoint 改變,我們需要重新去修改 crontab 設定。
並且今天如果要做主機擴展時,也需要去注意是否每一台主機都會吃到 crontab 的設定,如果重複執行那也是一件蠻尷尬的事。
var CronJob = require('cron').CronJob;
var job = new CronJob(
'* * * * * *',
function() {
console.log('You will see this message every second');
},
null,
true,
'America/Los_Angeles'
);
該套件在官網有清楚的用法介紹,至於跟 crontab 比起來有什麼好處呢?我覺得有以下幾點:
總而言之,就是可以擁有更高的靈活性。