Folha de Referência de Expressões Cron — Agende Tarefas como um Profissional
O Cron é a espinha dorsal da automação de tarefas agendadas em sistemas Unix-like. Seja para rotacionar logs, executar backups de banco de dados ou 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 você estiver adivinhando.
Esta referência cobre cada parte da sintaxe cron com exemplos práticos prontos para copiar e colar. Se você quer construir e validar expressões de forma interativa, abra o Construtor de Expressões Cron junto 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 abreviações 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)
Você 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
Salve esta tabela nos favoritos. Estes são os agendamentos que você usará 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 na 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 comercial | */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
Combinando 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 começando em janeiro (Jan, Abr, Jul, Out)
Dia do mês vs. Dia da semana
Quando tanto o dia do mês quanto 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 atendida — é uma relação OU, não E. Isso surpreende muitas pessoas.
0 0 15 * 1 # Executa no dia 15 E toda segunda — não "segunda-feira dia 15"
Execução na inicialização
Embora não seja uma expressão cron propriamente, @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 como você configura o cron varia por plataforma.
Crontab Linux
O clássico. Edite seu crontab de usuário com crontab -e:
# Executar backup todo dia à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 usuário extra:
0 2 * * * root /usr/local/bin/cleanup.sh
GitHub Actions
O GitHub Actions usa 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, veja YAML para Kubernetes e YAML para Docker Compose.
Kubernetes CronJob
O Kubernetes encapsula expressões cron em um 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 usa UTC por padrão. A partir da v1.25, você pode definir timeZone: "America/Sao_Paulo" na especificação do CronJob.
AWS CloudWatch (EventBridge)
A AWS usa uma sintaxe ligeiramente diferente com seis campos (adicionando segundos) e os wrappers rate() / cron():
cron(0 3 * * ? *) # Diariamente às 3h UTC
Note o caractere ? — a AWS exige isso para o dia do mês ou dia da semana quando o outro está especificado. Isso é diferente do cron padrão.
Armadilhas comuns
1. Confusão de fuso horário
O Cron usa 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 é 6h no horário de Brasília.
Sempre verifique qual fuso horário seu agendador usa. Para conversões de timestamp, nosso guia Timestamp Unix Explicado cobre os offsets UTC em detalhes.
2. Execuções sobrepostas
Se uma tarefa demora mais que o intervalo entre execuções, você terá instâncias sobrepostas. Um script que leva 8 minutos em um agendamento */5 * * * * vai acumular.
Soluções:
- Use um arquivo de lock (
flockno Linux) - Defina
concurrencyPolicy: Forbidnos CronJobs do Kubernetes - Verifique instâncias em execução no início do seu script
3. Saída ausente e depuração
O Cron não captura stdout por padrão. Sempre redirecione a saída:
*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1
Se uma tarefa cron não está executando, verifique:
grep CRON /var/log/syslogpara logs de execução- Permissões do arquivo do script
- A variável de ambiente
PATH— o cron tem umPATHmínimo por padrão
4. A armadilha do "dia 31 de cada mês"
0 0 31 * * # Só executa em meses com 31 dias
Isso executa em janeiro, março, maio, julho, agosto, outubro e dezembro — mas pula silenciosamente os outros cinco meses. Se você precisa de uma tarefa de fim de mês, considere executar no dia 1 e ajustar a lógica do seu script, ou use 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 arquivo crontab. Se sua última entrada não executa, adicione uma linha vazia no final.
Construindo 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:
- Selecionar valores para cada campo usando menus suspensos
- Ver uma descrição legível do agendamento
- 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 a qualquer servidor.
Cartão de referência rápida
Copie este bloco para a documentação do seu projeto ou wiki da equipe:
# ┌───── 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 comercial
Leitura adicional
- Timestamp Unix Explicado — Entenda o tempo epoch e conversões de fuso horário
- YAML para Kubernetes — Configure CronJobs e outros recursos Kubernetes
- YAML para Docker Compose — Agende contêineres em configurações compose
Pronto para construir sua próxima expressão cron? Abra o Construtor de Expressões Cron e acerte seu agendamento de primeira.