# Executando tarefas automatizadas com CronJob

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

Esta página mostra como executar tarefas automatizadas usando o objeto <a class='glossary-tooltip' title='Uma tarefa repetida (um trabalho) que é executada regularmente.' data-bs-toggle='tooltip' data-bs-placement='top' href='/pt-br/docs/concepts/workloads/controllers/cron-jobs/' target='_blank' aria-label='CronJob'>CronJob</a> no kubernetes.

## Antes de você começar

* <p>Você precisa ter um cluster do Kubernetes e a ferramenta de linha de comando kubectl deve estar configurada para se comunicar com seu cluster. É recomendado executar esse tutorial em um cluster com pelo menos dois nós que não estejam atuando como hosts de camada de gerenciamento. Se você ainda não possui um cluster, pode criar um usando o <a href="/pt-br/docs/tasks/tools/#minikube">minikube</a> ou pode usar um dos seguintes ambientes:</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>


<!-- steps -->

## Criando um CronJob {#creating-a-cron-job}

Cron jobs requerem um arquivo de configuração.
Aqui está um manifesto para CronJob que executa uma tarefa de demonstração simples a cada minuto:


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/pt-br/examples/application/job/cronjob.yaml" download="application/job/cronjob.yaml"><code>application/job/cronjob.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('application-job-cronjob-yaml')" title="Copiar application/job/cronjob.yaml para a área de transferência"></img></div>
    <div class="includecode" id="application-job-cronjob-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">batch/v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">CronJob</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">hello</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">schedule</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;* * * * *&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">jobTemplate</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">template</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">containers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">hello</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">busybox</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">imagePullPolicy</span><span class="p">:</span><span class="w"> </span><span class="l">IfNotPresent</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">command</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span>- <span class="l">/bin/sh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span>- -<span class="l">c</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span>- <span class="l">date; echo Hello from the Kubernetes cluster</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">restartPolicy</span><span class="p">:</span><span class="w"> </span><span class="l">OnFailure</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

Execute o exemplo de CronJob usando o seguinte comando:

```shell
kubectl create -f https://k8s.io/examples/application/job/cronjob.yaml
```
A saída é semelhante a esta:

```
cronjob.batch/hello created
```

Após criar o cron job, obtenha o status usando este comando:

```shell
kubectl get cronjob hello
```

A saída é semelhante a esta:

```
NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        <none>          10s
```

Como você pode ver pelos resultados do comando, o cron job ainda não agendou ou executou uma tarefa ainda.
<a class='glossary-tooltip' title='A verb that is used to track changes to an object in Kubernetes as a stream.' data-bs-toggle='tooltip' data-bs-placement='top' href='/pt-br/docs/reference/using-api/api-concepts/#api-verbs' target='_blank' aria-label='Observe'>Observe</a> que a tarefa será criada em cerca de um minuto:

```shell
kubectl get jobs --watch
```
A saída é semelhante a esta:

```
NAME               COMPLETIONS   DURATION   AGE
hello-4111706356   0/1                      0s
hello-4111706356   0/1           0s         0s
hello-4111706356   1/1           5s         5s
```

Agora você viu uma tarefa em execução agendada pelo cron job "hello".
Você pode parar de observá-lo e visualizar o cron job novamente para ver que ele agendou a tarefa:

```shell
kubectl get cronjob hello
```

A saída é semelhante a esta:

```
NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        50s             75s
```

Você deve ver que o cron job `hello` agendou uma tarefa com sucesso no tempo especificado em
`LAST SCHEDULE`. Existem atualmente 0 tarefas ativas, o que significa que a tarefa foi concluída ou falhou.

Agora, encontre os pods da última tarefa agendada criada e veja a saída padrão de um dos pods.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Nota</h4>O nome da tarefa é diferente do nome do pod.</div>


```shell
# Replace "hello-4111706356" with the job name in your system
pods=$(kubectl get pods --selector=job-name=hello-4111706356 --output=jsonpath={.items[*].metadata.name})
```
Veja os logs do pod:

```shell
kubectl logs $pods
```
A saída é semelhante a esta:

```
Fri Feb 22 11:02:09 UTC 2019
Hello from the Kubernetes cluster
```

## Deletando um CronJob {#deleting-a-cron-job}

Quando você não precisar mais de um cron job, exclua-o com `kubectl delete cronjob <cronjob name>`:

```shell
kubectl delete cronjob hello
```

Excluindo o cron job remove todas as tarefas e pods que ele criou e impede a criação de novas tarefas.
Você pode ler mais sobre como remover tarefas em [garbage collection](/docs/concepts/architecture/garbage-collection/).
