Agendador de tarefas em Node.js: node-cron, node-schedule e 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 das bibliotecas node-cron, node-schedule e Bull



No desenvolvimento web moderno com Node.js, surge frequentemente a necessidade de executar código em um cronograma ou com atraso. Seja para envio de campanhas de e-mail, limpeza de cache, geração de relatórios ou sincronização de dados — um agendador de tarefas confiável é essencial. Neste artigo, analisaremos três ferramentas populares: node-cron, node-schedule e Bull. Você conhecerá suas características, exemplos de uso e entenderá qual escolher para sua tarefa.



1. node-cron — o clássico Cron para Node.js

node-cron é uma biblioteca minimalista que implementa a sintaxe do agendador Unix cron. É ideal para tarefas repetitivas simples.



Instalação

npm install node-cron


Exemplo: tarefa executada a cada minuto

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

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


Formato da expressão cron

A expressão consiste em 5 campos:

  • segundo (0-59, opcional)
  • minuto (0-59)
  • hora (0-23)
  • dia do mês (1-31)
  • mês (1-12)
  • dia da semana (0-7, 0 e 7 = domingo)


Exemplo avançado: diariamente às 8:30 da manhã

cron.schedule('30 8 * * *', () => {  // Envio de relatório matinal  sendMorningReport();});


Características

  • Suporte a fusos horários através da opção timezone
  • Possibilidade de iniciar e parar tarefas
  • Leve (~20 KB)
  • Não é adequado para lógica complexa com filas


2. node-schedule — agendador flexível com regras recorrentes

node-schedule oferece uma API mais rica: é possível definir cronogramas através de objetos, e não apenas strings cron. Isso é útil para cenários complexos (por exemplo, "toda terceira terça-feira do mês às 15:00").



Instalação

npm install node-schedule


Exemplo: tarefa com expressão cron

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

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


Exemplo: regra recorrente através de objeto

const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [1, 3, 5]; // Seg, Qua, Sexrule.hour = 10;rule.minute = 30;

schedule.scheduleJob(rule, () => { console.log('Tarefa em dias úteis às 10:30');});


Exemplo: execução atrasada

const date = new Date(Date.now() + 5000); // após 5 segundosschedule.scheduleJob(date, () => {  console.log('Tarefa única após 5 segundos');});


Características

  • Definição flexível de regras (dias da semana, meses, intervalos)
  • Suporte a tarefas únicas por data
  • Possibilidade de cancelar tarefa: job.cancel()
  • Não suporta clusterização e filas


3. Bull — fila poderosa com agendador e repetições

Bull não é apenas um agendador, mas um sistema completo de filas baseado em Redis. É ideal para ambientes de produção: suporta tarefas atrasadas, repetições em caso de erros, prioridades e processamento paralelo.



Instalação

npm install bull# Requer Redis instalado


Exemplo: tarefa simples com atraso

const Queue = require('bull');const myQueue = new Queue('myQueue', 'redis://127.0.0.1:6379');

// Adiciona tarefa com atraso de 1 horamyQueue.add({ email: 'user@example.com' }, { delay: 3600000 });

// ManipuladormyQueue.process(async (job) => { console.log(`Enviando e-mail para ${job.data.email}`); await sendEmail(job

Recommendations