Agendador de Tarefas em Node.js (node-cron, node-schedule, Bull)

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Agendador de Tarefas em Node.js: visão geral e exemplos de uso



No desenvolvimento backend moderno, surge frequentemente a necessidade de executar código em horários programados: enviar campanhas de e-mail, limpar cache, criar backups de bancos de dados ou atualizar dados agregados. No ecossistema Node.js, existem várias bibliotecas maduras para esses fins. Neste artigo, vamos analisar três abordagens principais para o agendamento de tarefas: cron clássico, agendamento flexível e filas de tarefas.



1. node-cron — cron clássico para JavaScript



node-cron é uma biblioteca minimalista que permite executar funções usando expressões cron padrão. É ideal para tarefas periódicas simples (a cada minuto, a cada hora, todos os dias às 3:00).



Instalação:



npm install node-cron


Exemplo de tarefa que é executada a cada minuto:



const cron = require('node-cron');

cron.schedule('* * * * *', () => { console.log('Tarefa executada a cada minuto');});


Estrutura da expressão cron: segundo minuto hora dia_do_mês mês dia_da_semana (no node-cron, o segundo é opcional).



Exemplos de expressões:

  • '0 0 * * *' — todos os dias à meia-noite
  • '*/5 * * * *' — a cada 5 minutos
  • '0 9-18 * * 1-5' — a cada hora das 9 às 18 em dias úteis
  • '30 3 * * 0' — todos os domingos às 3:30


A biblioteca suporta validação de expressões e iniciar/parar tarefas:



const task = cron.schedule('*/10 * * * *', () => {  // tarefa a cada 10 minutos});

// Parar a tarefatask.stop();

// Retomartask.start();

// Verificar se a tarefa está ativaconsole.log(task.isStarted()); // true/false


Quando usar: para ações periódicas simples, onde não é necessário armazenar estado ou tratamento de erros.



2. node-schedule — agendamento flexível com suporte a regras recorrentes



node-schedule é uma alternativa mais poderosa que permite definir agendamentos não apenas via cron, mas também através de objetos JavaScript com indicação explícita de datas, dias da semana e horários.



Instalação:



npm install node-schedule


Exemplo com expressão cron:



const schedule = require('node-schedule');

const job = schedule.scheduleJob('*/5 * * * *', () => { console.log('Executado a cada 5 minutos');});


A principal vantagem é a possibilidade de definir o agendamento através de um objeto:



const job = schedule.scheduleJob({  hour: 14,  minute: 30,  dayOfWeek: [1, 3, 5] // segunda, quarta, sexta}, () => {  console.log('14:30 em dias úteis');});


Também é possível agendar uma tarefa única para uma data específica:



const date = new Date(2025, 11, 31, 23, 59, 0);

schedule.scheduleJob(date, () => { console.log('Ano Novo chegou!');});


A biblioteca suporta cancelamento de tarefas e verificação do próximo horário de execução:



// Cancelar a tarefajob.cancel();

// Obter a próxima data de execuçãoconsole.log(job.nextInvocation()); // Date object


Quando usar: quando é necessário controle preciso do tempo, combinação de regras ou tarefas únicas.



3. Bull — filas de tarefas com agendamento e novas tentativas



Bull é um sistema completo de filas baseado em Redis, que inclui um poderoso agendador. O Bull permite não apenas atrasar tarefas, mas também gerenciar repetições, prioridades e execução paralela.



Instalação:



npm install bull


Exemplo básico de fila com tarefa atrasada:



const Queue = require('bull');

const emailQueue = new Queue('email', { redis: { host: 'localhost', port: 63

Recommendations