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-cronExemplo: 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-scheduleExemplo: 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 instaladoExemplo: 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 Também na biblioteca
PM2: Monitoramento e gerenciamento de aplicações JavaScript
Envio de email em Swift (iOS/macOS): MFMailComposeViewController e SMTP
DashMap para Rust: guia completo com exemplos práticos
Geração de PDF em Go: visão geral das bibliotecas e exemplos de código