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.