Desenvolvimento

7 jun, 2018

Agendando tarefas com o Cron para Node

Publicidade

O Cron para Node é um pacote npm que nos permite fazer o agendamento de tarefas baseado em uma regra de tempo. Ele é baseado no Cron do Linux e seu funcionamento segue a mesma linha. Com ele é possível definir uma função para ser executada de tempos em tempos, ou seja, ela será agendada para ser executada dentro do Node. É uma maneira bastante eficaz para tarefas repetitivas que precisam rodar em segundo plano, como o envio de notificação, backup de banco de dados, entre outras.

Vamos dar uma olhada em como utilizá-la.

Instalando e executando o Cron

Para este artigo, utilizaremos o Yarn (leia o meu artigo sobre ele aqui) para a instalação do pacote, porém, você também pode usar o npm – vai da sua escolha. Para instalar o node-cron, basta executar o comando a seguir dentro da pasta do seu projeto.

yarn add cron

Isso fará com que todas as dependências necessárias sejam importadas. Feito isso, no arquivo index.js do nosso projeto importaremos o cron com um CronJob dentro dele:

const CronJob = require('cron').CronJob

Depois vamos criar um job com o CronJob. O padrão utilizado são de seis asteriscos separados por espaço, sendo que cada asterisco significa um elemento de data, ou seja:

  • 1º asterisco representa os segundos (0-59)
  • 2º os minutos (0-59)
  • 3º as horas (0-23)
  • 4º os dias (1-31)
  • 5º os meses (0-11)
  • 6º os dias da semana

Neste padrão a tarefa vai ser executada todo segundo, mas podemos configurar isso, como por exemplo, se quisermos que a tarefa seja executada a cada minuto, basta colocar zero no primeiro asterisco: CronJob(‘0 * * * * *’). Do mesmo modo, se for a cada hora, coloque zero nos dois primeiros asteriscos: CronJob(‘0 0 * * * *’), e assim sucessivamente.

Toda vez que esse job for chamado, vamos chamar a função como segundo parâmetro. Nela, colocaremos um console.log() com o nome da tarefa que será agendada. No final, colocaremos o NULL, pois não queremos que seja retornado nada depois que for disparado a tarefa, TRUE, para já começar a executar, e por fim – e não menos importante – o Timezone para rodar o cron job baseado na hora da zona escolhida. No exemplo usaremos São Paulo.

const CronJob = require('cron').CronJob
const job = new CronJob('* * * * * *', () => {
console.log('tarefa agendada')
}, null, true, 'America/Sao_Paulo')

Executando o arquivo index.js, vemos que a cada segundo é disparado a tarefa.

Bem bacana, né? Podemos criar quantos cronJobs quisermos para agendamento de várias tarefas simultâneas.

Confira o exemplo acima no GitHub.