📜  如何在 Node.js 中运行 Cron 作业?

📅  最后修改于: 2022-05-13 01:56:53.432000             🧑  作者: Mango

如何在 Node.js 中运行 Cron 作业?

Cron 作业:这些是操作系统定期运行的任务。用户可以安排命令,操作系统将根据给定的时间自动运行这些命令。它通常用于系统管理工作,例如备份、日志记录、发送时事通讯、订阅电子邮件等。

先决条件:

  • 安装了 Node.js
  • 已安装 NPM
  • Node.js 语法基础知识

我们将使用一个名为node-cron的包,它是用于 node.js 的纯 JavaScript 中的任务调度程序。我们也使用express作为服务器。使用命令安装所需的包

npm install express node-cron

句法:

cron.schedule("* * * * *", function() {
    // Task to do
});

Cron 作业的时间格式:

描述符及其范围:

  • 秒(可选): 0 – 59
  • 分钟: 0 – 59
  • 小时: 0 - 23
  • 一个月中的哪一天: 1 – 31
  • 月: 1 - 12
  • 星期几: 0 – 7(0 和 7 都代表星期日)

例子:

  • (*/10 * * * *) – 每 10 分钟运行一次
  • (* * 21 * *) – 每月 21运行
  • (0 8 * * 1) – 每周一早上 8 点运行

示例:创建一个名为index.js的新文件并添加以下代码:

// Importing required libraries
const cron = require("node-cron");
const express = require("express");
  
app = express(); // Initializing app
  
// Creating a cron job which runs on every 10 second
cron.schedule("*/10 * * * * *", function() {
    console.log("running a task every 10 second");
});
  
app.listen(3000);

使用命令node index运行文件,您将看到如下输出:

写入日志文件: Cron 作业可用于安排系统中的日志记录任务。我们可以记录给定时间的服务器状态以进行监控。

例子:

// Importing required packages
const cron = require("node-cron");
const express = require("express");
const fs = require("fs");
  
app = express();
  
// Setting a cron job
cron.schedule("*/10 * * * * *", function() {
  
    // Data to write on file
    let data = `${new Date().toUTCString()} 
                : Server is working\n`;
      
    // Appending data to logs.txt file
    fs.appendFile("logs.txt", data, function(err) {
          
        if (err) throw err;
          
        console.log("Status Logged!");
    });
});
  
app.listen(3000);

运行上述文件 30-40 秒后,您将看到创建的名为logs.txt的文件,其内容类似于以下内容:

每月通讯:发送每月通讯也是 cron 作业的一个用例,其中将每月向用户发送一封电子邮件,其中包含网站上的最新产品或博客信息。

您可以在此处了解有关在 Node.js 中发送电子邮件的更多信息。

例子:

// Importing packages
const cron = require("node-cron");
const express = require("express");
const nodemailer = require("nodemailer");
  
app = express();
  
// Calling sendEmail() function every 1 minute
cron.schedule("*/1 * * * *", function() {
sendMail();
});
  
// Send Mail function using Nodemailer
function sendMail() {
    let mailTransporter = nodemailer.createTransport({
        service: "gmail",
        auth: {
        user: "@gmail.com",
        pass: "**********"
        }
    });
      
    // Setting credentials
    let mailDetails = {
        from: "@gmail.com",
        to: "@gmail.com",
        subject: "Test mail using Cron job",
        text: "Node.js cron job email"
           + " testing for GeeksforGeeks"
    };
      
      
    // Sending Email
    mailTransporter.sendMail(mailDetails, 
                    function(err, data) {
        if (err) {
            console.log("Error Occurs", err);
        } else {
            console.log("Email sent successfully");
        }
    });
}
  
app.listen(3000);

上面的脚本将每分钟发送一次电子邮件。

注意:打开此链接以允许不太安全的应用程序:打开

现在使用node index.js运行该文件,您将看到如下输出:

在控制台中:

在 Gmail 收件箱中: