Реализация запланированных задач с помощью Node.js

Node.js

Автор: Крис Нвамба

Перевод: сумасшедший технический ботаник

оригинал:Scotch.IO /РУКОВОДСТВА/ вы ...

Копирование без разрешения строго запрещено

Node.js Cron Jobs By Examples

Раньше я хотел выполнять определенные действия в определенное время, не запуская их самостоятельно.

В этой статье мы рассмотрим, как создавать и использовать задания Cron в программе Node. Для этого создадим простенькую программу, которая автоматически удаляет с сервера автоматически сгенерированныеerror.logдокумент. Еще одним преимуществом заданий cron является то, что вы можете планировать программы для выполнения разных сценариев через разные промежутки времени.

Cron Job每分钟运行一个任务

Предварительные условия

Чтобы продолжить работу с этим руководством, вам потребуется следующее:

  • Узел установлен на вашем компьютере
  • иметь установленный NPM на вашем компьютере
  • Основы JavaScript

начиная

Сначала выполните следующую команду и создайте новую программу Node для проекта, а затем инициализируйте ее:

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

Установите модуль узла

Для того, чтобы программа работала корректно, нам понадобится несколько зависимостей. Вы можете установить их, запустив:

npm install express node-cron fs

express- Веб сервер

node-cron- Планировщик задач на чистом JavaScript для node.js

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");

Когда служба запустится, вы получите следующий вывод:

Cron Job自动删除错误文件

Примечание. Для имитации этой задачи можно установить более короткий интервал времени, задав количество минут в параметре

В планировщике можно делать что угодно. Делайте все, от создания файлов до отправки электронных писем и запуска скриптов. Давайте рассмотрим еще несколько вариантов использования

Вариант использования 2 — резервное копирование базы данных

Обеспечение доступности пользовательских данных имеет решающее значение для любого бизнеса. В том маловероятном случае, если ваша база данных будет повреждена случайно, все будет в беспорядке, если у вас нет резервной копии. Чтобы этого не произошло, вы также можете периодически создавать резервные копии существующих данных в базе данных с помощью задания cron. Давайте посмотрим, как это сделать.

Для иллюстрации мы будем использовать базу данных SQLite.

Во-первых, нам нужно установить модуль Node, который позволяет нам запускать сценарии оболочки:

npm install shelljs

Также установите SQLite:

npm install sqlite3

Теперь создайте образец базы данных, выполнив следующую команду:

sqlite3 database.sqlite

Чтобы делать резервную копию базы данных каждую ночь в 23: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

Будут получены следующие результаты:

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

Вариант использования 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Когда я запускаю службу, я получаю следующие результаты:

服务正在运行的Cron作业

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

Суммировать

在本文中,我介绍了 Cron 作业以及如何在 Node.js 程序中使用。 ЭтоGitHubСсылка на источник на .

Добро пожаловать в общедоступную учетную запись внешнего интерфейса: первопроходец внешнего интерфейса, бесплатно получающий полную серию руководств от входа до расширенного веб-пакета.