Автоматизация процессов при помощи 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 могут помочь решить большой спектр задач. Интересное применение — научить много таких роботов каждую минуту делать запросы на разные части сайта и проверять ответ, не упало ли что-нибудь. К ним можно прикрутить автоматическую отправку оповещений, да хоть в тот же Телеграм. Чем не система проверки работы сайта? Хоть отдельный сервер под неё выделяй.