Автор: Крис Нвамба
Перевод: сумасшедший технический ботаник
оригинал:Scotch.IO /РУКОВОДСТВА/ вы ...
Копирование без разрешения строго запрещено
Раньше я хотел выполнять определенные действия в определенное время, не запуская их самостоятельно.
В этой статье мы рассмотрим, как создавать и использовать задания Cron в программе Node. Для этого создадим простенькую программу, которая автоматически удаляет с сервера автоматически сгенерированныеerror.log
документ. Еще одним преимуществом заданий cron является то, что вы можете планировать программы для выполнения разных сценариев через разные промежутки времени.
Предварительные условия
Чтобы продолжить работу с этим руководством, вам потребуется следующее:
- Узел установлен на вашем компьютере
- иметь установленный 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");
Когда служба запустится, вы получите следующий вывод:
Примечание. Для имитации этой задачи можно установить более короткий интервал времени, задав количество минут в параметре
В планировщике можно делать что угодно. Делайте все, от создания файлов до отправки электронных писем и запуска скриптов. Давайте рассмотрим еще несколько вариантов использования
Вариант использования 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 作业以及如何在 Node.js 程序中使用。 ЭтоGitHubСсылка на источник на .