Javascript Cron: agendando e repetindo tarefas

Raul Esteves
2 min readOct 30, 2019
O que queremos? Realizar tarefas repetitivas /o/
Como queremos? Não estando envolvidos \o\
Como faremos? Cron \o/

A ideia aqui é dar uma introdução rápida, pra você pegar o conceito e não esquecer mais (e nem eu hehe).
Um cron é resumidamente uma maneira de agendar tarefas ou fazer com que elas se repitam a cada x intervalo de tempo. Nasceu no Unix mas neste artigo mostrarei como fazer no node.
Vamos começar instalando o pacote npm cron (npm i cron, eu sei que você sabe).
A partir daqui, parece esquisito mas é bem tranquilo, então vem comigo:

Olha só, rodando este ex vai ser exibido no nosso terminal a palavra ‘oi’ a cada segundo. Tudo bem, mas o que quer dizer esse tanto de asterisco?

* * * * * *
| | | | | |
| | | | | + — Dias da semana (range: 0-6 de domingo à sábado)
| | | | + — — Meses (range: 1–12)
| | | + — — — Dias do mês (range: 1–31)
| | + — — — — Horas (range: 0–59)
| + — — — — — Minutos (range: 0–59)
+ — — — — — — Segundos (range: 0–59)

Cada um deles é um campo. Sendo que ao estar sem valor, representa toda a faixa de valores possível (percebe que foi por isso que nosso ‘oi’ foi exibido nos segundos 1, 2, 3 e daí pra frente?)
Legal, então alguns ex simples pra fixar:

0 30 1 * 12 3
segundo 0, minuto 30, hora 1, todos os dias do mês, mês dezembro, dia da semana terça.
Ou seja: Às 01h30 de todas as terças do mês de dezembro.
00 00 00 * * *
todo dia à meia noite
0 */30 9–17 * * *
a cada 30min entre as 09h e as 17h. pera QUE?

Existem alguns poderes a mais: setar steps e ranges, vamos usar este último exemplo:
No segundo 0, a cada 30min, no intervalo entre 9h e 17h, todos os dias do mês, todos os meses, todos os dias da semana.
Uau, no final era realmente BEM mais simples do que parecia né?

Agora imagina o poder que isso trás estando com algumas ideias boas?

Lembrando que essa lib também tem como receber alguns outros parâmetros pra realizar coisas super interessantes, mas ai já foge um pouco do nosso assunto. Da uma bisbilhotada lá na página do pacote, coloquei o link nas referências.
Use com sabedoria e seja feliz :)

Bônus: essa lib que utilizamos, também aceita receber um objeto de data do JS, pra agendar a tarefa:

Espero que tenham gostado e até a próxima :)
ps: agradecimentos ao Pedro que me atiçou a curiosidade sobre o assunto.

fonte:
http://www.nncron.ru/help/EN/working/cron-format.htm
https://www.npmjs.com/package/cron

--

--