使用 node-cron 在節點中運行定期任務
什麼是 Cron?
Cron 是一個調度實用程序,在類 Unix 系統的後台作為守護進程運行。它非常適合運行定期任務,可以是您選擇的任何任務,例如啟動備份或清除數據庫中的數據。
您可以使用 crontab -e
通過命令行向 Cron 添加任務 命令。使用 -e
參數會將其置於編輯模式並打開您的默認編輯器,您可以在其中添加作業。命令的語法如下所示:
1 2 3 4 5 [USER] /path/to/command arg1 arg2
數字 1-5 代表您可以為調度作業指定的不同時間增量。更多詳情如下:
- 1:分鐘 (0-59)
- 2:小時(0-23)
- 3:天 (0-31)
- 4:月份(0-12,其中 12 是 12 月)
- 5:星期幾(0-7,其中星期日是 0 或 7)
USER
參數是可選的,用於指定命令應該作為哪個用戶運行。您還可以使用 -u
指定用戶 選項。調度參數還有很多選項和變體,但我們不會在這裡詳細介紹。互聯網上有很多其他資源,您可以在其中找到這些詳細信息。
下面是一個如何安排 Cron 運行腳本的簡單示例:
45 17 3 * * /path/to/script.sh
Cron 會在每個月的第三天下午 5:45 運行這個腳本。雖然語法一開始可能有點混亂,但它實際上是一種非常強大的安排重複任務的方法。這種格式已被許多程序和實用程序用於指定 schedules.dq4
節點-cron
它是什麼?
Cron 實用程序已成為調度任務的代名詞,這就是 node-cron
得名。它實際上並不使用或與下面的 Cron 實用程序交互,而是使用 Node 的 setTimeout()
為您安排和運行定期任務 功能。它通過解析您指定的 Cron 格式計劃來做到這一點,確定下一個“滴答”應該是什麼時候,並相應地設置超時。
如何使用
使用 node-cron
,您將不得不安排一個以編程方式運行的函數,這實際上可能比必須弄亂命令行更方便。一個簡單的函數可以這樣安排:
var cron = require('cron');
var job = new cron.CronJob('* * * * *', function() {
console.log('Function executed!');
}, null, true);
運行此代碼時,您將看到文本 'Function executed! ' 每分鐘打印一次到控制台。
您甚至可以更花哨地指定任務運行的時區。或者,另一種選擇是告訴 node-cron
還沒有開始工作。這樣您就可以初始化作業,然後使用 .start()
和 .stop()
僅在需要時使用方法。有關參數和選項的完整列表,請參閱完整文檔。
優點和缺點
就個人而言,我真的很喜歡 node-cron
因為您可以輕鬆地以編程方式安排代碼運行。由於它在 Node 上運行,因此您可以在任何支持 Node 的系統(如 Windows)上使用它,而不僅僅是類 Unix 系統。所以無論你用它做什麼,代碼都比直接使用 Cron 更獨立於系統。
在我看來,最大的缺點是,因為它沒有在下面使用 Cron,所以我們不會像使用 Cron 那樣獲得持久性。我的意思是在系統重新啟動時,我們的“工作”將不再運行。相反,您必須做一些額外的工作才能讓 Node 進程再次運行,例如通過在 /etc/init.d/
中放置/鏈接它來設置它以在啟動時運行 .做起來不難,但也不是很方便。