Cron jobs: Agendamento de tarefa com NodeJS e PM2

porLuis Augusto Moretto

Cron jobs: Agendamento de tarefa com NodeJS e PM2

O que são Cron Jobs?

cronjobs com Nodejs e Pm2

cronjobs com Nodejs e Pm2

Crontab é um serviço do sistema operacional que possibilita a execução periódica de serviços em um determinado intervalo de tempo. Isto é normalmente usado para sincronizar dados, bots e outros. Diversas plataformas utilizam Crons para rodar serviços em segundo plano. Exemplo é o Mautic.

Nodejs e Cron Jobs

Existem algumas opções para agendar os serviços nodejs em background.

Utilizando setinterval

setInterval(function(){console.log('TASK'); },3000 );

Executado a cada 3000 milisegundos. Você define um intervalo de tempo e chama seu método dentro da função do setInterval

Dica: Alto grau de acoplamento sendo necessário mudar o Script para alterar o tempo de execução. Baixa performance porque uma instância fica permanentemente em memória.

Pacote Node-Cron

Outra alternativa é utilizar o pacote. Instale o pacote e configure sua chamada.

npm install --save node-cron

Dica: Novamente existe uma situação de acoplamento sendo necessário mudar o Script para alterar o tempo de execução. Apesar disso o gerenciamento da performance é otimizado.

PM2 Como Gerenciador

Uma solução robusta consiste na instalação do PM2.

pm2 start my_first_chatbot.js --cron "*/15 * * * *"

Dica: solução ideal. Permite configurar a execução do serviço my_first_chatbot.js em Background. Sem acoplamento com a lógica de negócio. O PM2 vai rodar o seu Script e finalizar o mesmo a cada 15 minutos. (0,15,30,45) minutos de cada hora.

Permite escalar para rodar múltiplos processos fazendo um fork da instância.

Dicas para agendar suas tarefas node com PM2

*     *     *   *    *        Comando a ser executado
-     -     -   -    -
|     |     |   |    |
|     |     |   |    +----- dia da semana (0 - 6) (Domingo=0)
|     |     |   +------- mês (1 - 12)
|     |     +--------- dia do mês (1 - 31)
|     +----------- hora (0 - 23)
+------------- minuto (0 - 59)