用 Node.js 实现定时任务[每日前端夜话0xFE]
Node.js Cron Jobs By Examples
我曾经想要在特定时间执行特定的操作,而无需亲自运行它们。

在本文中,我们将研究如何在 Node 程序中创建和使用 Cron 作业。为此我们将创建一个简单的程序,该应用程序会自动从服务器中删除自动生成的 error.log 文件。Cron 作业的另一个优点是,你可以安排程序以不同的时间间隔执行不同的脚本。

用 Node.js 实现定时任务[每日前端夜话0xFE]

Cron Job每分钟运行一个任务

前提条件

要继续学习本教程,你需要具备以下条件:

  • 在你的机器上安装的 Node

  • 在你的计算机上安装有NPM

  • JavaScript 的基础知识

入门

首先,以下命令并为项目创建一个新的 Node 程序,然后其进行初始化:

1mkdir cron-jobs-node cd cron-jobs-node2npm init -y

安装 Node 模块
为了使程序正常工作,我们将需要几个依赖项。你可以通过运行以下命令来安装它们:

1npm install express node-cron fs

express - Web 服务器

node-cron - 用于 node.js 的纯 JavaScript 任务计划程序

fs - 文件系统模块

构建后端服务器

创建一个 index.js 文件,然后导入必要的 Node 模块:

1    touch index.js

编辑 index.js 文件,如下所示:

1// index.js2const cron = require("node-cron");3const express = require("express");4const fs = require("fs");56app = express();78[...]

这是 node-cron 的入口。我们希望能够定期删除错误日志文件,而不必进行手动操作。我们将用 node-cron 来做到这一点。首先看一个简单的任务。将以下内容添加到你的 index.js 文件中:

1// index.js2[...]3 // schedule tasks to be run on the server   4 cron.schedule("* * * * *", function() {5     console.log("running a task every minute");6 });78app.listen(3128);9[...]

现在,当我们运行服务器时将得到以下结果:

1> node index.js23running a task every minute4running a task every minute

调度任务的时间间隔
通过 node-cron,可以安排不同时间间隔的任务。让我们看看如何使用不同的时间间隔来安排任务。在上面的示例中,我们创建了一个简单的 Cron 作业,传递给 .schedule() 函数的参数为 *。这些参数在使用时具有不同的含义:

1* * * * * *2| | | | | |3| | | | | day of week4| | | | month5| | | day of month6| | hour7| minute8second ( optional )9

在这个例子中,如果想在每月的 21 号从服务器删除日志文件,可以把 index.js 更新为如下所示:

1// index.js 2const cron = require("node-cron"); 3const express = require("express"); 4const fs = require("fs"); 5 6app = express(); 7 8// schedule tasks to be run on the server 9cron.schedule("* * 21 * *", function() {10    console.log("---------------------");11    console.log("Running Cron Job");12    fs.unlink("./error.log", err => {13        if (err) throw err;14        console.log("Error file succesfully deleted");15    });16});1718app.listen("3128");

当服务运行时,你将获得以下输出:
用 Node.js 实现定时任务[每日前端夜话0xFE]

Cron Job自动删除错误文件

   注意:要模拟本任务,可以通过在参数中设置分钟数来将间隔设置为较短的时间

你可以在调度程序中执行任何操作。从创建文件到发送电子邮件和运行脚本的各种操作。让我们看一下更多的用例

用例2 - 备份数据库

确保用户数据的可访问性对于任何企业都是至关重要的。万一使你的数据库因为发生意外而受到损坏,如果没有备份的话,那么一切将会变得一团糟。为了避免这种情况的发生,你还可以用 Cron 作业定期备份数据库中的现有数据。让我们来看看如何做到这一点。

  为了便于说明,我们将使用 SQLite 数据库

首先,我们需要安装一个 Node 模块,该模块允许我们运行shell脚本:

1npm install shelljs

还要安装SQLite:

1npm install sqlite3

现在,通过运行以下命令来创建示例数据库:

1sqlite3 database.sqlite

想要每天晚上 11:59 备份数据库,请更新你的 index.js 文件,如下所示:

1// index.js 2const fs = require("fs"); 3let shell = require("shelljs"); 4const express = require("express"); 5 6app = express(); 7 8// To backup a database 9cron.schedule("59 23 * * *", function() {10    console.log("---------------------");11    console.log("Running Cron Job");12    if (shell.exec("sqlite3 database.sqlite  .dump > data_dump.sql").code !== 0) {13        shell.exit(1);14    }15    else{16        shell.echo("Database backup complete");17    }18});19app.listen("3128");

现在,当你用以下命令运行服务时:

1node index.js

将会得到以下结果:

用 Node.js 实现定时任务[每日前端夜话0xFE]

正在运行数据库备份的服务器

用例3 - 每隔 一段时间发送一次电子邮件

你还可以用 Cron 作业以不同的时间间隔发送电子邮件,使你的用户了解企业的最新情况。例如,你可以策划一个有趣的链接列表,然后在每个星期日将它们发送给用户。要执行此操作,你需要执行以下操作。

通过运行以下命令来安装 nodemailer:

1npm install nodemailer

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

1// index.js 2const cron = require("node-cron"); 3const express = require("express"); 4let nodemailer = require("nodemailer"); 5 6app = express(); 7 8// create mail transporter 9let transporter = nodemailer.createTransport({10    service: "gmail",11    auth: {12        user: "COMPANYEMAIL@gmail.com",13        pass: "userpass"14    }15});1617// sending emails at periodic intervals18cron.schedule("* * * * Wednesday", function(){19    console.log("---------------------");20    console.log("Running Cron Job");21    let mailOptions = {22        from: "COMPANYEMAIL@gmail.com",23        to: "sampleuser@gmail.com",24        subject: `Not a GDPR update ;)`,25        text: `Hi there, this email was automatically sent by us`26    };27    transporter.sendMail(mailOptions, function(error, info) {28        if (error) {29            throw error;30        } else {31            console.log("Email successfully sent!");32        }33    });34});3536app.listen("3128");
        注意:出于测试目的,你需要暂时允许 Gmail 帐户进行非安全登录。

现在,当用 node index.js 运行服务时,将得到以下结果:

用 Node.js 实现定时任务[每日前端夜话0xFE]

服务正在运行的Cron作业
用 Node.js 实现定时任务[每日前端夜话0xFE]

由Cron Job自动发送的电子邮件

总结

在本文中,我介绍了 Cron 作业以及如何在 Node.js 程序中使用。这是 GitHub 上的源码链接:https://github.com/christiannwamba/node-cron-jobs。

原文:https://scotch.io/tutorials/nodejs-cron-jobs-by-examples

更多相关文章

  1. 文件权限管理剖析
  2. Spring Boot 揭秘与实战 关于配置文件有哪些很棒的特性
  3. 全文检索引擎 Solr 系列(3)— Solr 核心概念、配置文件
  4. 使用Rails 3.2和AJAX(非flash上传解决方案)将多个文件直接上载到
  5. 使用ajax请求上传文件[副本]
  6. 使用JQuery从外部文件中通过id选择器获取html内容
  7. GET ajax请求发送到同一个php文件
  8. 无法使用jquery发送简单的ajax请求来获取json文件
  9. 在上传前预览xls、xlsx、doc等文件的缩略图

随机推荐

  1. 史上最全最强SpringMVC详细示例实战教程(
  2. activity和service之间的相互通信方法
  3. 序列化/反序列化,我忍你很久了,淦!
  4. WebAssembly 正式成为 Web 的第四种语言[
  5. 一个Java对象到底占多大内存?
  6. “你入我麾下,我给你天下”
  7. JeecgBoot低代码快速开发框架,用于生产环
  8. 再肝两夜,写了个「服务器项目部署」实战PD
  9. 给你5分钟白漂:我的常用在线工具网站
  10. 2020 年 Node.js 将会有哪些新功能[每日