alltools.one
DevOps
2026-02-25
11 min
alltools.one Team
cronschedulingdevopsautomationlinux

Folha de Referência de Expressões Cron — Agende Tarefas como um Profissional

O Cron é a espinha dorsal da automatização de tarefas agendadas em sistemas Unix-like. Quer esteja a rodar rotação de logs, a executar cópias de segurança de bases de dados ou a acionar pipelines CI/CD, as expressões cron definem quando essas tarefas são executadas. A sintaxe é compacta mas poderosa — e fácil de errar se estiver a adivinhar.

Esta referência abrange cada parte da sintaxe cron com exemplos práticos prontos a copiar e colar. Se quiser construir e validar expressões de forma interativa, abra o Construtor de Expressões Cron em conjunto com este guia.

Sintaxe Cron: Os cinco campos

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

┌───────────── minuto (0–59)
│ ┌───────────── hora (0–23)
│ │ ┌───────────── dia do mês (1–31)
│ │ │ ┌───────────── mês (1–12)
│ │ │ │ ┌───────────── dia da semana (0–7, onde 0 e 7 = Domingo)
│ │ │ │ │
* * * * *

Cada campo aceita um valor específico, um intervalo, uma lista ou um curinga. Juntos, os cinco campos especificam um agendamento recorrente exato.

CampoValores permitidosCaracteres especiais
Minuto0–59* , - /
Hora0–23* , - /
Dia do mês1–31* , - /
Mês1–12* , - /
Dia da semana0–7* , - /

Os campos de mês e dia da semana também aceitam abreviaturas de três letras (JANDEC, SUNSAT) na maioria das implementações.

Caracteres especiais explicados

Compreender quatro caracteres especiais desbloqueia todo o poder do cron:

Asterisco * — "Cada"

Corresponde a todos os valores possíveis para aquele campo.

* * * * *    # Cada minuto de cada hora de cada dia

Vírgula , — "E"

Especifica uma lista de valores discretos.

0 9,12,18 * * *    # Às 9:00, 12:00 e 18:00 diariamente

Hífen - — "Até"

Define um intervalo inclusivo.

0 9-17 * * *    # Cada hora das 9h às 17h

Barra / — "A cada n-ésimo"

Define um intervalo de passo a partir do início do intervalo.

*/10 * * * *    # A cada 10 minutos (0, 10, 20, 30, 40, 50)

Pode combinar um intervalo com um passo:

0 9-17/2 * * *    # A cada 2 horas das 9h às 17h (9, 11, 13, 15, 17)

Exemplos comuns de agendamento Cron

Guarde esta tabela nos favoritos. Estes são os agendamentos que utilizará repetidamente.

AgendamentoExpressãoExplicação
Cada minuto* * * * *Executa no início de cada minuto
A cada 5 minutos*/5 * * * *Minutos 0, 5, 10, 15, …, 55
A cada 15 minutos*/15 * * * *Minutos 0, 15, 30, 45
Cada hora0 * * * *No minuto 0 de cada hora
A cada 6 horas0 */6 * * *Às 00:00, 06:00, 12:00, 18:00
Diariamente à meia-noite0 0 * * *Uma vez por dia às 00:00
Diariamente às 3h0 3 * * *Uma vez por dia às 03:00
Toda segunda às 9h0 9 * * 1Semanalmente à segunda às 09:00
Dias úteis às 8h0 8 * * 1-5Segunda a sexta às 08:00
Fins de semana ao meio-dia0 12 * * 0,6Sábado e domingo às 12:00
Primeiro de cada mês0 0 1 * *Meia-noite do dia 1 de cada mês
A cada trimestre (Jan, Abr, Jul, Out)0 0 1 1,4,7,10 *Meia-noite do 1.º dos meses trimestrais
A cada 15 min em horário laboral*/15 9-17 * * 1-5Dias úteis, 9h–17h, a cada 15 minutos

Cole qualquer expressão no Construtor de Expressões Cron para visualizar os próximos horários de execução.

Padrões avançados

Combinar listas e intervalos

Os campos aceitam sintaxe mista. Para executar uma tarefa às 8h e 18h em dias úteis:

0 8,18 * * 1-5

Para direcionar meses específicos com um passo:

0 0 1 1-12/3 *    # A cada 3 meses a começar em janeiro (Jan, Abr, Jul, Out)

Dia do mês vs. Dia da semana

Quando tanto o dia do mês como o dia da semana estão definidos (não *), o comportamento depende da implementação. No cron padrão, a tarefa executa se qualquer uma das condições for satisfeita — é uma relação OU, não E. Isto surpreende muita gente.

0 0 15 * 1    # Executa no dia 15 E toda segunda — não "segunda-feira dia 15"

Execução no arranque

Embora não seja uma expressão cron propriamente dita, @reboot é um atalho amplamente suportado:

@reboot /usr/local/bin/start-service.sh

Outros atalhos comuns:

AtalhoEquivalente
@yearly0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily0 0 * * *
@hourly0 * * * *

Cron em diferentes ambientes

A sintaxe de cinco campos é universal, mas a forma como configura o cron varia por plataforma.

Crontab Linux

O clássico. Edite o seu crontab de utilizador com crontab -e:

# Executar cópia de segurança todos os dias às 2h
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

Tarefas cron do sistema em /etc/cron.d/ incluem um campo de utilizador extra:

0 2 * * * root /usr/local/bin/cleanup.sh

GitHub Actions

O GitHub Actions utiliza a mesma sintaxe de cinco campos dentro de um gatilho schedule. Todos os horários são UTC.

on:
  schedule:
    - cron: '0 3 * * 1-5'   # Dias úteis às 3h UTC

Para um aprofundamento na configuração YAML, consulte YAML para Kubernetes e YAML para Docker Compose.

Kubernetes CronJob

O Kubernetes encapsula expressões cron num recurso CronJob:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-report
spec:
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: report
              image: reporting:latest
              command: ["python", "generate_report.py"]
          restartPolicy: OnFailure

O Kubernetes utiliza UTC por defeito. A partir da v1.25, pode definir timeZone: "Europe/Lisbon" na especificação do CronJob.

AWS CloudWatch (EventBridge)

A AWS utiliza uma sintaxe ligeiramente diferente com seis campos (adicionando segundos) e os wrappers rate() / cron():

cron(0 3 * * ? *)    # Diariamente às 3h UTC

Note o carácter ? — a AWS exige-o para o dia do mês ou dia da semana quando o outro está especificado. Isto é diferente do cron padrão.

Armadilhas comuns

1. Confusão de fuso horário

O Cron utiliza o fuso horário do sistema no Linux, mas o Kubernetes e o GitHub Actions executam em UTC. Uma tarefa agendada para 0 9 * * * será disparada às 9h UTC, que é 9h em Lisboa (WET) ou 10h (WEST no horário de verão).

Verifique sempre qual fuso horário o seu agendador utiliza. Para conversões de timestamp, o nosso guia Timestamp Unix Explicado aborda os offsets UTC em detalhe.

2. Execuções sobrepostas

Se uma tarefa demora mais que o intervalo entre execuções, terá instâncias sobrepostas. Um script que leva 8 minutos num agendamento */5 * * * * vai acumular.

Soluções:

  • Utilize um ficheiro de bloqueio (flock no Linux)
  • Defina concurrencyPolicy: Forbid nos CronJobs do Kubernetes
  • Verifique instâncias em execução no início do seu script

3. Saída em falta e depuração

O Cron não captura stdout por defeito. Redirecione sempre a saída:

*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1

Se uma tarefa cron não está a executar, verifique:

  • grep CRON /var/log/syslog para logs de execução
  • Permissões do ficheiro do script
  • A variável de ambiente PATH — o cron tem um PATH mínimo por defeito

4. A armadilha do "dia 31 de cada mês"

0 0 31 * *    # Só executa em meses com 31 dias

Isto executa em janeiro, março, maio, julho, agosto, outubro e dezembro — mas salta silenciosamente os outros cinco meses. Se precisa de uma tarefa de fim de mês, considere executar no dia 1 e ajustar a lógica do seu script, ou utilize uma ferramenta que suporte semânticas de "último dia do mês".

5. Esquecer a quebra de linha no final do crontab

Algumas implementações de cron requerem uma quebra de linha final no ficheiro crontab. Se a sua última entrada não executa, adicione uma linha vazia no final.

Construir expressões visualmente

Memorizar a sintaxe funciona para padrões comuns, mas agendamentos complexos são mais fáceis de construir visualmente. O Construtor de Expressões Cron no alltools.one permite-lhe:

  • Selecionar valores para cada campo usando menus suspensos
  • Ver uma descrição legível do agendamento
  • Pré-visualizar os próximos horários de execução
  • Copiar a expressão final com um clique

Funciona inteiramente no seu navegador — nenhum dado é enviado para qualquer servidor.

Cartão de referência rápida

Copie este bloco para a documentação do seu projeto ou wiki da equipa:

# ┌───── min (0-59)
# │ ┌───── hora (0-23)
# │ │ ┌───── dia do mês (1-31)
# │ │ │ ┌───── mês (1-12)
# │ │ │ │ ┌───── dia da semana (0-7, Dom=0 ou 7)
# │ │ │ │ │
# * * * * *

*/5 * * * *        # A cada 5 minutos
0 * * * *          # Cada hora
0 0 * * *          # Diariamente à meia-noite
0 9 * * 1-5        # Dias úteis às 9h
0 0 1 * *          # Primeiro do mês
*/15 9-17 * * 1-5  # A cada 15 min, horário laboral

Leitura adicional


Pronto para construir a sua próxima expressão cron? Abra o Construtor de Expressões Cron e acerte o seu agendamento à primeira.

Published on 2026-02-25
Cron Expression Cheat Sheet — Schedule Like a Pro | alltools.one