Автоматизация процессов при помощи Cron Job для Node.js

Автоматизация процессов при помощи Cron Job для Node.js

@startuphero

Задача

На сайте, написанном на Node.js, предусмотрена функция добавления доменов в личный кабинет. Необходимо ограничить количество доменов, которые можно добавить за один день, до какого-то небольшого значения.

Логика

Добавить в модель User поле-счётчик, отвечающее за количество добавленных записей. Раз в день сбрасывать до нуля этот счетчик в каждом документе из базы с пользователями.

Реализация

Необходимый модуль с документацией лежит на Гитхабе.


Установил npm-модуль в свой проект:

$ npm install --save node-cron
const cron = require('node-cron');



Три строчки — и первый скрипт для робота готов:

cron.schedule('* * * * * *, function() {
  console.log('🤖 Mr.Robot: daily users update, all add counters are reset');
});


Некоторое время после запуска сервера — робот пишет в консоль каждую секунду


Эти звездочки первым аргументом — универсальные выражения для всех cron'ов. Вот, что они означают:

 # ┌────────────── second (optional)
 # │ ┌──────────── minute
 # │ │ ┌────────── hour
 # │ │ │ ┌──────── day of month
 # │ │ │ │ ┌────── month
 # │ │ │ │ │ ┌──── day of week
 # │ │ │ │ │ │
 # │ │ │ │ │ │
 # * * * * * *



Все, что осталось сделать — заменить простой вывод в консоль серверной логикой:

cron.schedule('0 0 12 * * *, async function() {
  await User.update({}, {$set: {thisDayAdded: 0}}, {multi: true})
  .then(console.log('🤖 Mr.Robot: daily users update, all add counters are reset'));
});



Робот готов, каждый день в 12 часов все счетчики thisDayAdded будут обнуляться.


Заключение

На первый взгляд кажется, что Cron Job могут помочь решить большой спектр задач. Интересное применение — научить много таких роботов каждую минуту делать запросы на разные части сайта и проверять ответ, не упало ли что-нибудь. К ним можно прикрутить автоматическую отправку оповещений, да хоть в тот же Телеграм. Чем не система проверки работы сайта? Хоть отдельный сервер под неё выделяй.

Report Page