如何在 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 收件箱中: