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.
| Campo | Valores permitidos | Caracteres especiais |
|---|---|---|
| Minuto | 0–59 | * , - / |
| Hora | 0–23 | * , - / |
| Dia do mês | 1–31 | * , - / |
| Mês | 1–12 | * , - / |
| Dia da semana | 0–7 | * , - / |
Os campos de mês e dia da semana também aceitam abreviaturas de três letras (JAN–DEC, SUN–SAT) 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.
| Agendamento | Expressão | Explicaçã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 hora | 0 * * * * | No minuto 0 de cada hora |
| A cada 6 horas | 0 */6 * * * | Às 00:00, 06:00, 12:00, 18:00 |
| Diariamente à meia-noite | 0 0 * * * | Uma vez por dia às 00:00 |
| Diariamente às 3h | 0 3 * * * | Uma vez por dia às 03:00 |
| Toda segunda às 9h | 0 9 * * 1 | Semanalmente à segunda às 09:00 |
| Dias úteis às 8h | 0 8 * * 1-5 | Segunda a sexta às 08:00 |
| Fins de semana ao meio-dia | 0 12 * * 0,6 | Sábado e domingo às 12:00 |
| Primeiro de cada mês | 0 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-5 | Dias ú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:
| Atalho | Equivalente |
|---|---|
@yearly | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
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 (
flockno Linux) - Defina
concurrencyPolicy: Forbidnos 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/syslogpara logs de execução- Permissões do ficheiro do script
- A variável de ambiente
PATH— o cron tem umPATHmí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
- Timestamp Unix Explicado — Compreenda o tempo epoch e conversões de fuso horário
- YAML para Kubernetes — Configure CronJobs e outros recursos Kubernetes
- YAML para Docker Compose — Agende contentores em configurações compose
Pronto para construir a sua próxima expressão cron? Abra o Construtor de Expressões Cron e acerte o seu agendamento à primeira.