Expressões cron
Os cinco campos
Seção intitulada “Os cinco campos”┌───────────── minuto (0-59)│ ┌─────────── hora (0-23)│ │ ┌───────── dia do mês (1-31)│ │ │ ┌─────── mês (1-12 ou JAN-DEC)│ │ │ │ ┌───── dia da semana (0-6, domingo=0; ou SUN-SAT)│ │ │ │ │* * * * *| Símbolo | Significado | Exemplo |
|---|---|---|
* |
Qualquer valor | * * * * * = a cada minuto |
, |
Lista | 0 8,12,18 * * * |
- |
Intervalo | 0 9-18 * * * |
/ |
Passo | */15 * * * * = a cada 15 min |
L |
Último (nem todo cron suporta) | 0 3 L * * |
Exemplos prontos
Seção intitulada “Exemplos prontos”| Expressão | Quando |
|---|---|
*/5 * * * * |
A cada 5 minutos |
0 * * * * |
A cada hora, no minuto 0 |
0 3 * * * |
Todo dia às 3h |
0 3 * * 1-5 |
Dias úteis às 3h |
0 3 * * 0 |
Domingos às 3h |
30 2 1 * * |
Dia 1 de cada mês, 2h30 |
0 0 1 1 * |
1º de janeiro |
*/10 8-18 * * 1-5 |
A cada 10 min, horário comercial, dias úteis |
0 */6 * * * |
A cada 6 horas |
15 4 * * 6 |
Sábados às 4h15 |
Sintaxe estendida
Seção intitulada “Sintaxe estendida”Suportada por muitas implementações (Vixie cron, Kubernetes):
| Atalho | Equivale a |
|---|---|
@yearly / @annually |
0 0 1 1 * |
@monthly |
0 0 1 * * |
@weekly |
0 0 * * 0 |
@daily / @midnight |
0 0 * * * |
@hourly |
0 * * * * |
@reboot |
No início do sistema (não é agendamento) |
Alguns sistemas (Quartz, EventBridge) usam seis ou sete campos, com segundos e/ou ano. Confirme o dialeto antes de copiar expressão.
Cron em Kubernetes
Seção intitulada “Cron em Kubernetes”apiVersion: batch/v1kind: CronJobmetadata: { name: relatorio, namespace: loja }spec: schedule: "0 6 * * *" timeZone: "America/Sao_Paulo" # a partir do Kubernetes 1.27 concurrencyPolicy: Forbid # não sobrepõe execuções startingDeadlineSeconds: 300 # desiste se atrasar mais que isso successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 3 jobTemplate: spec: backoffLimit: 2 activeDeadlineSeconds: 3600 # mata o job que travou template: spec: restartPolicy: OnFailure containers: - name: relatorio image: registry.exemplo.com/relatorio@sha256:SUBSTITUAconcurrencyPolicy |
Comportamento |
|---|---|
Allow (padrão) |
Permite execuções simultâneas |
Forbid |
Pula a nova se a anterior ainda roda |
Replace |
Mata a anterior e inicia a nova |
Sem Forbid, um job que demora mais que o intervalo acumula execuções sobrepostas — causa
clássica de sobrecarga e de dados duplicados.
Fuso horário
Seção intitulada “Fuso horário”O ponto que mais causa engano: cron do sistema usa o fuso do host; muitos serviços gerenciados usam UTC.
O Brasil não adota horário de verão desde 2019, então America/Sao_Paulo é UTC−3 o ano
todo. Ainda assim, deixe o fuso explícito:
# na crontab do sistemaCRON_TZ=America/Sao_Paulo0 3 * * * /usr/local/bin/backup.shConversão rápida para quem precisa escrever em UTC: hora BRT + 3 = UTC. 20h BRT =
23:00 UTC; 2h BRT = 05:00 UTC.
Em serviços que não aceitam fuso (versões antigas do CronJob, algumas nuvens), escreva em UTC e comente a hora local ao lado.
Comandos e verificação
Seção intitulada “Comandos e verificação”crontab -l # sua crontabcrontab -e # editarcrontab -u app -l # de outro usuáriols /etc/cron.d/ # crontabs do sistemagrep CRON /var/log/syslog # execuções (Debian/Ubuntu)journalctl -u cron -f # em systemd
# valide a expressão antes de publicarsystemd-analyze calendar "*-*-* 03:00:00"Pegadinhas
Seção intitulada “Pegadinhas”- Dia do mês e dia da semana são OU, não E.
0 3 1 * 1executa no dia 1 e em toda segunda-feira. %na crontab significa nova linha; escape com\%(comum ao usardate +%F).- O
PATHno cron é mínimo: use caminhos absolutos ou definaPATHno topo. - Cron não carrega o perfil do shell — variáveis de ambiente do seu
.bashrcnão existem. - Sem redirecionar saída, o cron tenta enviar e-mail; use
>> /var/log/job.log 2>&1. - Job sem trava pode sobrepor: use
flock -n /tmp/job.lock comando. @rebootnão é agendamento periódico.- Em containers, o processo do cron precisa ser o PID 1 e receber sinais — quase sempre é melhor usar CronJob ou timer do systemd.
Veja também
Seção intitulada “Veja também”- systemd — timers como alternativa
- Workloads
- Desligar ambientes fora do horário comercial