Cron jobs, timeouts e intervals com NestJS \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 17 Horas 

 55 Min 

 42 Seg 

   Tempo restante da oferta: 17 55 42 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Cron jobs, timeouts e intervals com NestJS  [ Node ](https://www.treinaweb.com.br/blog/categoria/node-js) 

# Cron jobs, timeouts e intervals com NestJS

 Neste artigo vamos utilizar o módulo nativo scheduler do NestJS para trabalhar com tarefas automatizadas com cron jobs, timeouts e intervals

 [ Wesley Gado ](https://www.treinaweb.com.br/blog/autor/wesley-gado) 3 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS.png)  

Neste artigo vamos aprender a automatizar tarefas utilizando cron jobs, timeouts e intervals com o [NestJS](https://www.treinaweb.com.br/blog/o-que-e-nestjs "NestJS").

## O que é cron job?

Nos sisetmas Unix temos a possibilidade de programar tarefas automatizadas, esse recurso se chama “cron jobs”. Podemos automatizar programas, scripts, comandos e etc.

O interessante é que além da frequência de “tempo”, é possível escolher esta frequência de forma mais precisa, como em horários e determinados dias da semana, entre outras possibilidades.

Para isto é necessário utilizar um arquivo de configuração chamado “crontab”, que segue a seguinte sintaxe:

```
* * * * * comando_a_executar

```

Cada asterisco representa o tempo a ser configarado relacionado a frequência da execução da tarefa, como a tabela abaixo:

```tsx
* * * * *
| | | | |
| | | | dia da semana
| | | meses
| | dia do mês
| horas
minutos

```

Portanto, podemos simular esse recurso em nossas aplicações, automatizando a execução de métodos e trazendo flexibilidade para implementar tarefas cada vez mais robustas e eficazes.

Você pode simular essas configurações de agendamento de tarefas utilizando o site [contrab.guru](https://crontab.guru/ "contrab.guru").

## Implementando exemplo

Primeiro de tudo, você deve ter o [Node.js](https://www.treinaweb.com.br/blog/node-js-por-que-voce-deve-conhecer-essa-tecnologia "Node.js") instalado, conforme pode seguir o passos pelo artigo instalando [node.js no Windows, Mac e Linux](https://www.treinaweb.com.br/blog/instalacao-do-node-js-windows-mac-e-linux "node.js no windows, mac e linux").

[  ![Node.js - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/node-js.svg)   Curso Node.js - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/nodejs-fundamentos)

Logo em seguida vamos criar um projeto base com o NestJS, mas antes precisamos instalar o NestCLI com o seguinte comando:

```tsx
npm i -g  @nestjs/cli

```

## Configurando projeto base

Agora vamos criar um projeto para demonstrar alguns exemplos:

```tsx
nest new tasks

```

Também é necessário instalar o pacote schedule do NestJS:

```tsx
npm i @nestjs/schedule

```

## Criando exemplo

Vamos pensar como podemos utilizar na prática a utilização dessas tarefas automatizadas.

Em um determinado contexto temos uma tabela pedidos, onde os pedidos devem ser pagos em até, no máximo, 24 horas. Se este tempo for ultrapassado, os pedidos são cancelados automaticamente. Portanto, podemos criar uma tarefa que a cada minuto busca os pedidos que estão em aberto por mais de 24 horas e altera seu status para cancelado.

Para isto vamos criar uma pasta schedule, e dentro desta pasta um arquivo `schedule.service.ts`:

```tsx
//schedule.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class ScheduleService {}

```

Perfeito, devemos atualizar o arquivo `app.module.ts` que se encontra na pasta src, importando o modulo instalado acima e adicionando o `schedule.service.ts` na propriedade providers:

```tsx
//app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ScheduleServiceService } from './schedule/schedule-service.service';
import { ScheduleModule } from '@nestjs/schedule';

@Module({
  imports: [ScheduleModule.forRoot()],
  controllers: [AppController],
  providers: [AppService, ScheduleService],
})
export class AppModule {}

```

Vamos implementar um método que irá simular a ação de alterar o status dos pedidos em um determinado tempo:

```tsx
import { Injectable, Logger } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';

@Injectable()
export class ScheduleService {
  private readonly logger = new Logger(ScheduleService.name);

  @Cron('*/5 * * * * *')
  cancelarPedidoSemPagamento() {
    //lógica para buscar e cancelar os pedidos.
    this.logger.debug(
      `Pedido de n: ${Math.floor(Math.random() * 120)} cancelado!`,
    );
  }
}

```

Ao executar o código acima, o método `cancelarPedidoSemPagamento()` foi executado a cada 5 segundos automaticamente:

![Aplicação executando método a cada 5 segundos com cron job](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/11/log-execucao-cron-job.png)

Para isto utilizamos o decorator `@Cron()` e passamos como parâmetro a frequência que o método será executado, podendo ter infinitas combinações:

```tsx
* * * * * *
| | | | | |
| | | | | dia da semana
| | | | meses
| | | dia do mês
| | horas
| minutos
segundos (opcional)

```

Alguns exemplos que constam na própria [documentação do NestJS](https://docs.nestjs.com/techniques/task-scheduling "documentação do NestJS"):

\* \* \* \* \* \*a cada segundo45 \* \* \* \* \*a cada minuto, no 45º segundo0 10 \* \* \* \*a cada hora, no início do 10º minuto0 \*/30 9-17 \* \* \*a cada 30 minutos entre as 9h e as 17h0 30 11 \* \* 1-5de segunda a sexta-feira às 11h30min

[  ![Nest.js - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/nest-js.svg)   Curso Nest.js - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/nestjs-fundamentos)

## Usando enums

O interessante é que o NestJS, além da facilidade do uso de decorators para trabalhar com cron jobs, também permite que seja utilizado enums como parâmetro, deixando o código mais legivel e fácil de desenvolver:

![utilizando enums como parâmetro do decorator cron](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/11/enums-parametro.png)

Temos outras possibilidade também de trabalhar com o tempo em relação a execução dos métodos, por exemplo utilizando o decorator `Interval()` e o `Timeout()`.

## Utilizando Interval()

Com o decorator `Interval()` podemos passar como parâmetro o tempo, em milissegundos, sobre o intervalo de execução do método, por exemplo:

```tsx
import { Injectable, Logger } from '@nestjs/common';
import { Interval } from '@nestjs/schedule';

@Injectable()
export class ScheduleService {
  private readonly logger = new Logger(ScheduleService.name);

  @Interval(5000)
  cancelarPedidoSemPagamento() {
    //lógica para buscar e cancelar os pedidos.
    this.logger.debug(
      `Pedido de n: ${Math.floor(Math.random() * 120)} cancelado!`,
    );
  }
}

```

![Aplicação executando método com interval](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/11/log-execucao-interval.png)Neste exemplo o método foi executado a cada 5 segundos, conforme definido no decorator `Interval()`

## Utilizando Timeout()

Podemos também definir uma única execução após um determinado tempo, para isso usamos o decorator `Timeout()`, também passando o tempo em milissegundos como parâmetro.

```tsx
import { Injectable, Logger } from '@nestjs/common';
import { Timeout } from '@nestjs/schedule';

@Injectable()
export class ScheduleService {
  private readonly logger = new Logger(ScheduleService.name);

  @Timeout(5000)
  cancelarPedidoSemPagamento() {
    //lógica para buscar e cancelar os pedidos.
    this.logger.debug(
      `Pedido de n: ${Math.floor(Math.random() * 120)} cancelado!`,
    );
  }
}

```

![Aplicação executando método timeout](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/11/log-execucao-timeout.png)Neste exemplo o método foi executado somente uma vez, após 5 segundos, conforme definido no decorator `Timeout()`

[  ![Nest.js  - Banco de dados com TypeORM](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/nest-js.svg)   Curso Nest.js - Banco de dados com TypeORM Conhecer o curso ](https://www.treinaweb.com.br/curso/nestjs-banco-de-dados-com-typeorm)

## Conclusão

Neste artigo abordamos a base do uso de cron jobs, timeouts e intervals, lembrando que o próprio NestJS provê o pacote schedule, que facilita a utilização desses recursos através de decorators. Podemos também nos aprofundar na utilização desses recursos através da [Dynamic API](https://docs.nestjs.com/techniques/task-scheduling#dynamic-schedule-module-api), que fornece possibilidade de trabalhar com instancias de destes recursos em qualquer lugar da aplicação e gerenciá-los, onde veremos como nos próximos artigos em um futuro breve.

Por fim, caso queira aprender mais sobre [NestJS](https://nestjs.com/) saiba que aqui na [TreinaWeb](https://treinaweb.com.br/) temos o curso [Nest.js - Fundamentos](https://www.treinaweb.com.br/curso/nestjs-fundamentos) que possui **02h07 de vídeos** e um total de **18 exercícios**. Conheça também nossos outros cursos de [TypeScript](https://www.treinaweb.com.br/busca?q=TypeScript).

Veja quais são os tópicos abordados durante o curso de Nest.js - Fundamentos:

- Conhecendo a estrutura;
- Utilizando Nest CLI;
- Entendendo Rotas, Controllers e Views;
- Conexão com banco de dados;
- Usando TypeORM;
- Template Engine.

 [ ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/06/BANNER-BLOG-2-2.jpg) ](https://api.whatsapp.com/send/?phone=5544988609539&text=Olá,+li+o+artigo+no+blog+e+gostaria+de+saber+mais+sobre+a+TreinaWeb.)

- [ #Back-end ](https://www.treinaweb.com.br/blog/tag/back-end)
- [ #Node.js ](https://www.treinaweb.com.br/blog/tag/node-js)
- [ #NestJS ](https://www.treinaweb.com.br/blog/tag/nestjs)

Autor

 ![Wesley Gado](//secure.gravatar.com/avatar/1b770ca482a7232b1885881430a592bb?d=mm)

## Wesley Gado

 Formado em Análise e Desenvolvimento de Sistemas pelo Instituto Federal de São Paulo, atuou em projetos como desenvolvedor Front-End. Nas horas vagas grava Podcast e arrisca uns três acordes no violão. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wesley-gado)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/spring-framework-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     3 anos atrás

    ##  [ Trabalhando com Scheduled Tasks no Spring Boot ](https://www.treinaweb.com.br/blog/trabalhando-com-scheduled-tasks-no-spring-boot) 

     Descubra o poder das Scheduled Tasks no Spring Boot. Aprenda a criar, configurar e aprimorar tarefas agendadas em Java com o Spring Framework.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/10/MULTI-STACK-400x280.jpg)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     5 anos atrás

    ##  [ Ambiente Back-end Multi-stack 3 ](https://www.treinaweb.com.br/blog/ambiente-back-end-multi-stack-3) 

     Aprenda a instalar o ambiente de desenvolvimento necessário para o Multi-stack 3. Seja PHP com Laravel, Python com Django ou Java com Spring.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/12/16065017/front-back-ou-fullstack-400x280.png)  [ Carreira ](https://www.treinaweb.com.br/blog/categoria/carreira) 

     8 anos atrás

    ##  [ Devo começar como Front-End, Back-End ou Full Stack? ](https://www.treinaweb.com.br/blog/devo-comecar-como-front-end-back-end-ou-full-stack) 

     Devo começar minha carreira como desenvolvedor Front-End, Back-End ou FullStack?

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/front_vs_back-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     10 anos atrás

    ##  [ O que é front-end e back-end? ](https://www.treinaweb.com.br/blog/o-que-e-front-end-e-back-end) 

     Os desenvolvedores de front-end e back-end se completam na maioria dos casos. Se faz indispensável saber o papel que cada um desempenha ou pode desempenhar.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/11/dicas-projetos-back-end-min-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Ideias de projetos para praticar - back-end ](https://www.treinaweb.com.br/blog/ideias-de-projetos-para-praticar-back-end) 

     Fazer pequenos projetos irá te ajudar a melhorar suas habilidades de codificação e até aprender novas linguagens. Por isso, veremos neste artigo algumas dicas de projetos para colocar em prática.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/conheca-o-padrao-arquitetural-porto-para-aplicacoes-back-end-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     6 anos atrás

    ##  [ Conheça o padrão arquitetural Porto para aplicações back-end ](https://www.treinaweb.com.br/blog/conheca-o-padrao-arquitetural-porto-para-aplicacoes-back-end) 

     Conheça o padrão arquitetural Porto! Voltado para aplicações back-end, ele permite escrever monolitos que podem ser facilmente migrados para micro serviços.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/10/03234313/kotlin-400x280.jpg)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     7 anos atrás

    ##  [ É possível usar Kotlin no back-end? ](https://www.treinaweb.com.br/blog/e-possivel-usar-kotlin-no-back-end) 

     Confira neste artigo o Kotlin, a linguagem de programação da JetBrains e da Google que é considerada a segunda linguagem mais amada e vêm ganhando mais mercado a cada ano.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/08/17172630/desenvolvedor-web-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     8 anos atrás

    ##  [ Quatro habilidades para se tornar um desenvolvedor web back-end ](https://www.treinaweb.com.br/blog/quatro-habilidades-para-se-tornar-um-desenvolvedor-web-back-end) 

     Conheça as habilidades necessárias para se tornar um bom desenvolvedor web back-end.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/vs-code-melhores-extensoes-para-front-end-400x280.png)  [ Ferramentas ](https://www.treinaweb.com.br/blog/categoria/ferramentas) 

     6 anos atrás

    ##  [ VS Code - Melhores extensões para Front-End - Parte 1 ](https://www.treinaweb.com.br/blog/vs-code-melhores-extensoes-para-front-end-parte-1) 

     Conheça as melhores extensões disponíveis do VS Code para Front-End e melhore a eficiência dos seus trabalhos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/10/01105921/0-400x280.png)  [ Carreira ](https://www.treinaweb.com.br/blog/categoria/carreira) 

     7 anos atrás

    ##  [ Como crescer no Front-End? ](https://www.treinaweb.com.br/blog/como-crescer-no-front-end) 

     Veja várias dicas para alavancar a sua carreira como Desenvolvedor Front-End

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/dicas-projetos-frontend-min-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     4 anos atrás

    ##  [ 5 ideias de projetos para praticar - front-end ](https://www.treinaweb.com.br/blog/5-ideias-de-projetos-para-praticar-front-end) 

     Confira neste artigo algumas dicas de projetos de front-end, para que você possa praticar e melhorar suas habilidades.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/06/tw-dev-server-400x280.png)  [ Ferramentas ](https://www.treinaweb.com.br/blog/categoria/ferramentas) 

     7 anos atrás

    ##  [ Tw Dev Server - como ele pode te ajudar a estudar programação? ](https://www.treinaweb.com.br/blog/tw-dev-server-como-ele-pode-te-ajudar-a-estudar-programacao) 

     Aprenda a utilizar o Tw Dev Server como servidor de arquivos estáticos e como simulador de back end com API e banco de dados para facilitar seus estudos.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **17h 55min 42s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
