Как запускать Cron Jobs в Node.js?
Вы уже читали руководства по многим типам приложений, которые можно построить с помощью Node.js, но задумывались ли вы, как мы создаем такие проекты, как планировщики задач, автоматические рассылки, планировщики сообщений и т.д., которые требуют, чтобы какая-то система выполняла задачи по определенному расписанию?
Ну, мы можем сделать всё это, запустив cron jobs в Node.js. В этом уроке мы расскажем все о cron jobs, что это такое и как их реализовать в Node.js, а затем создадим планировщик задач с их помощью. Давайте начнём!
Понимание Cron Jobs
Термин «cron jobs» первоначально произошёл от операционной системы Unix. Cron — это планировщик заданий на основе времени в операционных системах на базе — Unix, таких как Linux, macOS и т.д., для периодического выполнения заданий в определенные даты и время.
Сегодня в этой статье мы будем использовать npm "node-cron" для стимулирования этой функции cron job — планирования задач и запуска в определенное время. Давайте начнем с понимания этого модуля и метода, необходимого для нашей задачи.
Использование node-cron для запуска запланированных заданий в Node.js
node-cron
- это сторонний модуль, который можно установить в Node.js с помощью NPM. Все, что вам нужно сделать, это выполнить в папке проекта команду npm i node-cron
. Этот модуль считается планировщиком задач, написанным на JavaScript на основе GNU crontab, и с его помощью мы можем добиться того же, что делает cron job в операционной системе на базе Unix.
Синтаксис
const cron = require('node-cron');
cron.schedule('* * * * *', () => {
// Task to be executed
});
Вы можете запутаться, увидев аргумент, передаваемый этому методу, но все очень просто.
Выражение аргумента состоит из шести полей, представляющих секунду (необязательно), минуту, час, день месяца, месяц и день недели, в таком порядке. Мы можем передавать пользовательские значения или использовать звездочку (*) в качестве подстановочного знака.
В приведенном выше синтаксисе мы использовали только звездочки, это означает, что задача или функция обратного вызова, которую мы передали в качестве аргумента этому методу, будет выполняться каждую минуту, каждый час, каждый день месяца, каждый месяц и каждый день недели.
Пример
Предположим, вы хотите отправить сообщение кому-то особенному в его день рождения, 29 сентября, в полночь 12 часов, вы можете легко сделать это, используя приведенный код.
const cron = require('node-cron');
cron.schedule('0 0 29 9 * 2024', () => {
console.log("Happy Birthday!");
});
Здесь мы не определяли *
в позиции дня недели, поскольку уже задали день месяца (29) и месяц (9).
Создание приложения-напоминания с помощью node-cron
Теперь, когда мы узнали всё о cron jobs и node-cron
, пришло время создать полноценное приложение для их реализации. Для этого мы будем использовать JavaScript и Node.js.
Шаг 1: Создайте папку проекта, затем создайте файл app.js
для написания кода Node.js, а затем откройте папку проекта в редакторе кода.
Шаг 2: Откройте терминал и выполните приведенную ниже команду для установки node-cron
и readline
.
npm i node-cron readline
Модуль readline
используется для чтения ввода из командной строки и печати вывода. Мы будем использовать его для получения данных о времени напоминания от пользователей.
Шаг 3: Внутри файла app.js
напишите следующий код.
const readline = require('readline');
const cron = require('node-cron');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Enter reminder time (DD MM YYYY HH mm): ', (answer) => {
const [day, month, year, hour, minute] = answer.split(' ');
const cronExpression = `${minute} ${hour} ${day} ${month} *`;
cron.schedule(cronExpression, () => {
console.log(`Time to do your task! It's ${hour}:${minute} on ${day}/${month}/${year}`);
rl.close();
});
console.log('Reminder set successfully!');
});
Здесь мы сначала импортировали модули readline
и node-cron
, затем создали интерфейс rl
для ввода и вывода данных с помощью метода createInterface()
.
Затем мы использовали метод question()
, чтобы попросить пользователя ввести данные, на основе которых будет создано выражение аргумента и передано в нашу главную функцию cron.schedule()
для установки напоминания, после чего мы закрыли интерфейс rl
и вывели сообщение об успехе в консоль.
Шаг 4: Запустите приложение, выполнив приведенную ниже команду.
node app.js
Введите необходимую информацию, чтобы установить напоминание. Для тестирования я устанавливаю его на следующую минуту.
Напоминание автоматически появится на консоли в указанное время.
Заключение
Короче говоря, можно запускать cron jobs в Node.js с помощью функции cron.schedule()
модуля npm node-cron
для установки задач, которые запускаются в определенное время. Эта функция принимает выражение-аргумент, содержащее пять обязательных полей: минуту, час, день месяца, месяц и день недели для установки напоминаний, а также звездочки (*) в качестве подстановочного знака, если какое-либо поле передавать необязательно.
Мы надеемся, что вы получили удовольствие от чтения этого материала!