Получи случайную криптовалюту за регистрацию!

​​Как использовать cron в Node.js? #kubernetes #service #nestj | Node.js Recipes

​​Как использовать cron в Node.js?
#kubernetes #service #nestjs

Есть много бизнес задач делать что-то по расписанию. Для этого используют утилиту cron, а расписание описывают crontab выражением. Пример: задача – отправлять отчет на емейл каждый день в 3 часа ночи, график – 0 3 * * *. Разобраться с crontab поможет сервис crontab.guru

Реализовывать cron в #nodejs проекте можно по разному:
Cron вызов REST API. Потерян контроль, найти ошибку будет сложно.
Использование setInterval/setTimeout. Оставьте это авторам библиотек, сфокусируйтесь на бизнес домене.
На уровне кода cron можно реализовать одноименным пакетом. В Nest.js есть @nestjs/schedule. Стоить учесть, что только один Node.js процесс должен запускать cron, иначе приложение теряет масштабируемость. Решается введением master process.

На уровне операционной системы. Встроенный OS cron будет вызывать Node.js как CLI утилиту. Хорошо в виртуальных машинах, противопоказано внутри Docker контейнеров (избегайте порождающих процессов).
Для этого используем не библиотеку аля yargs, а cli-framework (см. clipanion и его аналоги).
Для Nest.js есть пакеты nestjs-command и nestjs-console.

Cloud Native подход. Зависит от облака и требуемого способа запуска (serverless или docker). Смотрим документацию облака и консультируемся с DevOps инженером.

Kubernetes native подход:
Cron на уровне кода, но его запуск только в одной реплике. Используется StatefulSets, а мастер реплика определяется через _0 postfix. Подробней
Cron на уровне кода, но вынесен в отдельный Deployment с одной репликой.
Если же задачи ресурсоемкие, то правильно использовать CronJob.

Выбирайте решение на правильном уровне!