Agendador de tarefas em Node.js: node-schedule e node-cron

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: node-schedule e node-cron



No desenvolvimento web moderno, surge frequentemente a necessidade de executar determinadas ações em um horário específico ou em intervalos regulares. Por exemplo, envio de relatórios por email, limpeza de banco de dados, raspagem de recursos externos ou atualização de cache. No ambiente Node.js, agendadores de tarefas são usados para esses fins. Duas das ferramentas mais populares são node-schedule e node-cron. Neste artigo, analisaremos ambas em detalhes, forneceremos exemplos de código e ajudaremos você a escolher a mais adequada para o seu projeto.



Por que preciso de um agendador de tarefas em Node.js?

Node.js é um ambiente single-thread com arquitetura orientada a eventos. As funções embutidas setTimeout e setInterval permitem executar código com atraso ou periodicamente, mas não são adequadas para cenários complexos:

  • Não há flexibilidade na configuração (por exemplo, "toda segunda segunda-feira do mês às 10:30").
  • Não mantêm o estado após a reinicialização da aplicação.
  • Dificuldade de gerenciamento (cancelamento, alteração de agendamento).

Os agendadores resolvem esses problemas, fornecendo uma API simples para criar, iniciar e cancelar tarefas agendadas.



Biblioteca node-schedule

node-schedule é um agendador flexível, baseado em uma sintaxe semelhante ao cron, mas com recursos avançados. Ele permite definir tarefas recorrentes com precisão de minuto, bem como tarefas únicas para uma data específica.



Instalação

npm install node-schedule


Principais recursos

  • Suporte a expressões cron (6 campos: segundos, minutos, horas, dia do mês, mês, dia da semana).
  • Possibilidade de definir execução única usando um objeto Date.
  • Regras recorrentes usando o objeto RecurrenceRule.
  • Métodos cancel() e cancelNext() para gerenciamento de tarefas.


Exemplo 1: Executar tarefa a cada 5 minutos

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

const job = schedule.scheduleJob('*/5 * * * *', function() { console.log('Tarefa executada a cada 5 minutos:', new Date().toLocaleString());});

// Cancelar tarefa após 20 minutossetTimeout(() => { job.cancel(); console.log('Tarefa cancelada');}, 20 * 60 * 1000);


Exemplo 2: Tarefa em uma data específica

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

const date = new Date(2025, 5, 15, 10, 30, 0); // 15 de junho de 2025, 10:30:00

const job = schedule.scheduleJob(date, function() { console.log('Tarefa única executada em', new Date().toLocaleString());});

console.log('Tarefa agendada para', date.toLocaleString());


Exemplo 3: Regra recorrente complexa

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

const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [1, 3, 5]; // Segunda, quarta, sextarule.hour = 9;rule.minute = 0;

const job = schedule.scheduleJob(rule, function() { console.log('Tarefa executada às 9:00 nos dias úteis (Seg, Qua, Sex)');});


Biblioteca node-cron

node-cron é uma alternativa leve, baseada no cron clássico dos sistemas Unix. É mais simples de usar, mas menos flexível que o node-schedule. Suporta 5 campos (minutos, horas, dia do mês, mês, dia da semana).



Instalação

npm install node-cron


Principais recursos

  • Sintaxe cron padrão (5 campos).
  • Métodos start(), stop(), destroy().
  • Suporte a fusos horários através da opção timezone.
  • Possibilidade de executar a tarefa imediatamente com now().


Exemplo 1: Executar tarefa todos os dias à meia-noite

const c                    

Recommendations