Node.js實現定時任務


我曾經想要在特定時間執行特定的操作,而無需親自運行它們。

在本文中,我們將研究如何在 Node 程序中創建和使用 Cron 作業。為此我們將創建一個簡單的程序,該應用程序會自動從服務器中刪除自動生成的 error.log 文件。 Cron 作業的另一個優點是,你可以安排程序以不同的時間間隔執行不同的腳本。

 

前提條件

要繼續學習本教程,你需要具備以下條件:

  • 在你的機器上安裝的 Node
  • 在你的計算機上安裝有npm
  • JavaScript 的基礎知識

 

入門

首先,以下命令並為項目創建一個新的 Node 程序,然后其進行初始化:

mkdir cron-jobs-node cd cron-jobs-node npm init -y

 

安裝 Node 模塊

為了使程序正常工作,我們將需要幾個依賴項。你可以通過運行以下命令來安裝它們:

npm install express node-cron fs

express - Web 服務器

node-cron - 用於 node.js 的純 JavaScript 任務計划程序

fs - 文件系統模塊

 

構建后端服務器

創建一個 index.js 文件,然后導入必要的 Node 模塊:

touch index.js

編輯 index.js 文件,如下所示:

// index.js const cron = require("node-cron"); const express = require("express"); const fs = require("fs"); app = express(); [...]

這是 node-cron 的入口。我們希望能夠定期刪除錯誤日志文件,而不必進行手動操作。我們將用 node-cron 來做到這一點。首先看一個簡單的任務。將以下內容添加到你的 index.js 文件中:

// index.js [...] // schedule tasks to be run on the server cron.schedule("* * * * *", function() { console.log("running a task every minute"); }); app.listen(3128); [...]

現在,當我們運行服務器時將得到以下結果:

> node index.js running a task every minute running a task every minute

 

調度任務的時間間隔

通過 node-cron,可以安排不同時間間隔的任務。讓我們看看如何使用不同的時間間隔來安排任務。在上面的示例中,我們創建了一個簡單的 Cron 作業,傳遞給 .schedule() 函數的參數為 ​​* * * * *。這些參數在使用時具有不同的含義:

* * * * * *
| | | | | |
| | | | | day of week | | | | month | | | day of month | | hour | minute second ( optional )

在這個例子中,如果想在每月的 21 號從服務器刪除日志文件,可以把 index.js 更新為如下所示:

// index.js const cron = require("node-cron"); const express = require("express"); const fs = require("fs"); app = express(); // schedule tasks to be run on the server cron.schedule("* * 21 * *", function() { console.log("---------------------"); console.log("Running Cron Job"); fs.unlink("./error.log", err => { if (err) throw err; console.log("Error file succesfully deleted"); }); }); app.listen("3128");

當服務運行時,你將獲得以下輸出:

注意:要模擬本任務,可以通過在參數中設置分鍾數來將間隔設置為較短的時間

你可以在調度程序中執行任何操作。從創建文件到發送電子郵件和運行腳本的各種操作。讓我們看一下更多的用例

 

用例2 - 備份數據庫

確保用戶數據的可訪問性對於任何企業都是至關重要的。萬一使你的數據庫因為發生意外而受到損壞,如果沒有備份的話,那么一切將會變得一團糟。為了避免這種情況的發生,你還可以用 Cron 作業定期備份數據庫中的現有數據。讓我們來看看如何做到這一點。

為了便於說明,我們將使用 SQLite 數據庫

首先,我們需要安裝一個 Node 模塊,該模塊允許我們運行shell腳本:

npm install shelljs

還要安裝SQLite:

npm install sqlite3

現在,通過運行以下命令來創建示例數據庫:

sqlite3 database.sqlite

想要每天晚上 11:59 備份數據庫,請更新你的 index.js 文件,如下所示:

// index.js const fs = require("fs"); let shell = require("shelljs"); const express = require("express"); app = express(); // To backup a database cron.schedule("59 23 * * *", function() { console.log("---------------------"); console.log("Running Cron Job"); if (shell.exec("sqlite3 database.sqlite .dump > data_dump.sql").code !== 0) { shell.exit(1); } else{ shell.echo("Database backup complete"); } }); app.listen("3128");

現在,當你用以下命令運行服務時:

node index.js

將會得到以下結果:

資源搜索網站大全 https://www.renrenfan.com.cn

用例3 - 每隔 一段時間發送一次電子郵件

你還可以用 Cron 作業以不同的時間間隔發送電子郵件,使你的用戶了解企業的​​最新情況。例如,你可以策划一個有趣的鏈接列表,然后在每個星期日將它們發送給用戶。要執行此操作,你需要執行以下操作。

通過運行以下命令來安裝 nodemailer:

npm install nodemailer

完成后,更新 index.js 文件,如下所示:

// index.js const cron = require("node-cron"); const express = require("express"); let nodemailer = require("nodemailer"); app = express(); // create mail transporter let transporter = nodemailer.createTransport({ service: "gmail", auth: { user: "COMPANYEMAIL@gmail.com", pass: "userpass" } }); // sending emails at periodic intervals cron.schedule("* * * * Wednesday", function(){ console.log("---------------------"); console.log("Running Cron Job"); let mailOptions = { from: "COMPANYEMAIL@gmail.com", to: "sampleuser@gmail.com", subject: `Not a GDPR update ;)`, text: `Hi there, this email was automatically sent by us` }; transporter.sendMail(mailOptions, function(error, info) { if (error) { throw error; } else { console.log("Email successfully sent!"); } }); }); app.listen("3128");
注意:出於測試目的,你需要暫時允許 Gmail 帳戶進行非安全登錄。

現在,當用 node index.js 運行服務時,將得到以下結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM