Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Create CronJobs for scheduled tasks

Última atualização: Jun 27, 2026

O CronJob é um workload que não gerencia Pods diretamente; ele cria instâncias de Job independentes conforme um agendamento e rastreia seu status. Utilize-o para tarefas periódicas, como backups, geração de relatórios ou envio de e-mails. Este tópico mostra como criar um CronJob no console ou com kubectl.

Crie um CronJob pelo console do ACK ou via kubectl.

Importante

As imagens de exemplo são públicas. Seu cluster precisa de acesso à Internet para baixá-las:

Pré-requisitos

Crie um CronJob pelo console

  1. Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do cluster. No painel à esquerda, selecione Workloads > CronJobs.

  3. Na página CronJobs, clique em Create from Image.

  4. Na página Basic Information, defina as configurações básicas e clique em Next para ir à página Container.

  5. Na seção General, defina Image Name como registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest. Na seção Lifecycle, configure o parâmetro Start. Clique em Next para acessar a página Advanced.

    • Command: /bin/sh

    • Parameter: ["-c", "echo 'starting...'; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo $COUNTER; done; echo 'finished'; exit 0"]

    Importante

    O cluster precisa de acesso à Internet para baixar registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest. Se você selecionou Configure SNAT for VPC durante a criação do cluster, essa opção já está ativada. Caso contrário, ative o acesso à Internet para o cluster.

    image.png

  6. Na página Advanced, configure o agendamento e as definições do job. Neste exemplo, defina o agendamento para cada 2 minutos e mantenha as demais opções nos valores padrão. Clique em Create.

    CronJob settings

    Parâmetro

    Descrição

    Schedule

    Frequência. Escolha uma predefinição (horária, diária, semanal, mensal) ou insira uma expressão cron personalizada (minuto hora dia-do-mês mês dia-da-semana). Consulte Sintaxe de expressão cron.

    Concurrency policy

    Comportamento quando um novo Job deve iniciar enquanto o anterior ainda está em execução. Forbid: ignora o novo Job (para jobs sequenciais ou dependentes). Allow: executa ambos simultaneamente (para jobs independentes). Replace: encerra o Job em execução e inicia um novo (quando apenas o resultado mais recente importa).

    Job history

    Parâmetro

    Descrição

    Successful Jobs History Limit

    Quantidade de Jobs bem-sucedidos recentes a serem retidos. Os mais antigos são excluídos.

    Failed Jobs History Limit

    Quantidade de Jobs com falha recentes a serem retidos.

    Job settings

    Parâmetro

    Campo Kubernetes

    Descrição

    Padrão

    Completions

    jobTemplate.spec.completions

    Número de Pods que precisam ser concluídos para que o Job tenha sucesso.

    Parallelism

    jobTemplate.spec.parallelism

    Número máximo de Pods executados simultaneamente.

    Timeout

    jobTemplate.spec.activeDeadlineSeconds

    Tempo máximo de execução de um Job. O Job é interrompido ao atingir esse limite, independentemente do status de conclusão.

    600 segundos

    BackoffLimit

    jobTemplate.spec.backoffLimit

    Número máximo de tentativas em todos os Pods antes que o Job seja marcado como falho.

    6

    Restart

    jobTemplate.spec.template.spec.restartPolicy

    Comportamento de reinicialização do Pod em caso de falha. Never: reinicia o container localmente sem criar um novo Pod (as reinicializações não contam para o backoffLimit). On Failure: cria um novo Pod para substituir aquele que falhou.

    Labels, annotations

    Parâmetro

    Descrição

    Pod Labels

    Rótulos adicionados a cada Pod. O ACK adiciona app: <application-name> por padrão. Usados para associar Pods a workloads e serviços.

    Pod Annotations

    Anotações adicionadas a cada Pod. Alguns recursos do ACK exigem anotações específicas.

    image.png

  7. Após a criação, os Jobs aparecem em intervalos de 2 minutos.

    image.png

Crie um CronJob com kubectl

Importante

Conecte-se ao cluster via kubectl antes de prosseguir.

  1. Salve o YAML a seguir como cronjob.yaml. A especificação jobTemplate.spec possui a mesma estrutura de uma especificação de Job independente.

    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: example-cronjob
      labels:
        app: cronjob
    spec:
      schedule: "*/2 * * * *"           # Run every 2 minutes
      concurrencyPolicy: Forbid          # Skip new Job if previous one is still running
      successfulJobsHistoryLimit: 3      # Keep the 3 most recent successful Jobs
      failedJobsHistoryLimit: 2          # Keep the 2 most recent failed Jobs
      jobTemplate:
        spec:
          completions: 1                 # Job succeeds after 1 Pod completes
          parallelism: 1                 # Run one Pod at a time
          template:
            spec:
              containers:
              - name: counter
                image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
                command:
                - /bin/sh
                - -c
                - |
                  echo "starting...";
                  COUNTER=0;
                  while [ $COUNTER -lt 5 ]; do
                    sleep 2;
                    COUNTER=$((COUNTER+1));
                    echo "${COUNTER}";
                  done;
                  echo "finished";
                  exit 0
              restartPolicy: Never       # Do not restart the Pod on failure
  2. Aplique o manifesto:

    kubectl apply -f cronjob.yaml

    Saída esperada:

    cronjob.batch/example-cronjob created

Verifique o CronJob

Confirme se o CronJob executa conforme o agendamento.

  1. Verifique o status do CronJob:

    kubectl get cronjob example-cronjob

    Saída esperada:

    NAME               SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    example-cronjob   */2 * * * *   False     0        <none>          15s

    O campo SUSPEND está definido como False, indicando que o CronJob está ativo e dispara conforme o agendamento.

  2. Após cerca de 10 minutos, liste os Jobs criados pelo CronJob:

    kubectl get job

    Saída esperada:

    NAME                       STATUS     COMPLETIONS   DURATION   AGE
    example-cronjob-2901**22   Complete   1/1           31s        5m13s
    example-cronjob-2901**23   Complete   1/1           31s        3m13s
    example-cronjob-2901**24   Complete   1/1           26s        73s

    Os Jobs surgem em intervalos de 2 minutos e exibem o status Complete ao terminar.

  3. Consulte os logs de um Pod do Job:

    # List Pods for the most recent Job
    kubectl get pods --selector=job-name=<job-name>
    
    # View logs
    kubectl logs <pod-name>

    Substitua <job-name> pelo nome de um Job obtido na saída acima (por exemplo, example-cronjob-2901**24). Uma execução bem-sucedida termina com finished.

Sintaxe de expressão cron

Uma expressão cron consiste em cinco campos separados por espaços:

# .---------------- minute (0–59)
# |  .------------- hour (0–23)
# |  |  .---------- day of month (1–31)
# |  |  |  .------- month (1–12)
# |  |  |  |  .---- day of week (0–6, Sunday to Saturday)
# |  |  |  |  |
  *  *  *  *  *

Atalhos comuns:

Entrada

Descrição

Equivalente

@hourly

Executa uma vez por hora, no início da hora

0 * * * *

@daily (ou @midnight)

Executa uma vez por dia, à meia-noite

0 0 * * *

@weekly

Executa uma vez por semana, à meia-noite de domingo

0 0 * * 0

@monthly

Executa uma vez por mês, à meia-noite do primeiro dia

0 0 1 * *

@yearly (ou @annually)

Executa uma vez por ano, à meia-noite de 1º de janeiro

0 0 1 1 *

Crie e valide expressões cron com crontab.guru.

Próximos passos