O que é uma expressão cron?
Uma expressão cron é uma string de agendamento compacta que diz a um agendador de tarefas exatamente quando executar uma tarefa. O formato nasceu em 1975 no daemon Unix V7 cron e praticamente não mudou desde então — a mesma gramática de cinco campos aparece hoje em Kubernetes CronJobs, AWS EventBridge, fluxos de trabalho do GitHub Actions, Google Cloud Scheduler, GitLab CI, pipelines Jenkins e no binário crontab incluído em todas as distribuições Linux. A gramática condensa muito significado em cerca de treze caracteres, daí que um parser que converta isso para linguagem natural seja a diferença entre uma publicação confiante e um rollback às 3h da manhã.
Como funciona uma expressão cron?
Uma expressão cron padrão tem cinco campos separados por espaços que definem em conjunto um agendamento repetido. O motor compara o relógio atual com a expressão a cada minuto e executa a tarefa quando os cinco campos coincidem. Os campos, da esquerda para a direita:
- Minuto (0–59). Em que minuto da hora a tarefa é executada.
0significa no início da hora,30significa às e meia,*/5significa de cinco em cinco minutos (00, 05, 10, ...), e15,45significa ao quarto de hora e a três quartos. - Hora (0–23). A hora do dia no relógio de 24 horas.
0é meia-noite,9são as 9h,17são as 17h. Intervalos (9-17para horário comercial) e valores de passo (*/2para cada duas horas) funcionam da mesma forma que para os minutos. - Dia do mês (1–31). O dia do calendário em que executar.
1é o primeiro do mês,*é todos os dias,1,15é o primeiro e o décimo quinto. Cuidado com31— ignora silenciosamente os meses que não têm 31 dias. - Mês (1–12 ou JAN–DEZ). Em que meses executar.
*é todos os meses,1,7é janeiro e julho,1-3é só o primeiro trimestre. Os nomes de mês de três letras são insensíveis a maiúsculas na maioria das implementações. - Dia da semana (0–7, em que tanto 0 como 7 significam domingo). Restringe a execução a dias da semana específicos.
1-5é segunda a sexta,0,6é o fim de semana,MON-FRIfunciona na maioria dos parsers. Quando tanto o dia do mês como o dia da semana têm valores específicos, o cron clássico executa em qualquer correspondência (OR lógico), o que surpreende as pessoas sempre.
Por que usar um parser de expressão cron?
- Identifique a leitura errada silenciosa antes de publicar. A expressão `0 2 */3 * *` executa às 2h de madrugada a cada três dias, não a cada três minutos — cole-a aqui e verá isso em linguagem natural antes de ir para produção.
- A maioria dos agendadores em nuvem funciona em UTC por padrão. Pré-visualizar as próximas dez execuções no seu fuso local revela o desfasamento de uma hora por hora de verão antes que alguém seja acordado às 3h.
- Atalhos como `@daily`, `@weekly` e `@monthly` são convenientes mas ambíguos. O parser mostra o formulário de cinco campos subjacente para que saiba exatamente o que foi agendado.
- O construtor campo a campo permite compor um agendamento uma coluna de cada vez e ver a descrição em linguagem natural atualizar em tempo real, o que é muito mais rápido do que reler a página do manual cron pela décima vez.
Onde são usadas expressões cron?
A sintaxe cron aparece em qualquer lugar onde uma tarefa precise de se repetir num relógio. Três das superfícies mais comuns, com os problemas exatos pelos quais cada uma é conhecida:
- Agendamentos de backup. A entrada clássica `crontab -e` que faz dump de uma base de dados para S3 às 2h da madrugada, ou que roda um arquivo `pg_dump` no primeiro dia de cada mês. Uma linha como `0 2 * * * /usr/local/bin/backup.sh` foi publicada em mais servidores Linux do que qualquer outra linha de cron na história. Acerte no minuto e na hora, redirecione o stderr para algum lugar durável, e substituiu uma checklist manual por um script que funciona sozinho.
- Gatilhos `schedule` do GitHub Actions. A chave `on.schedule.cron` em `.github/workflows/*.yml` aceita cron padrão de cinco campos, mas a tarefa sempre corre em UTC e o GitHub ignora silenciosamente uma execução se a fila de executores estiver ocupada. Padrão comum: `cron: '0 9 * * 1-5'` para enviar um resumo de segunda a sexta às 9h UTC. Pré-visualize aqui no seu fuso local para não prometer um resumo às 9h de Lisboa que na verdade chega às 10h em horário de verão.
- AWS EventBridge Scheduler. As expressões cron do EventBridge têm um sexto campo para o ano e requerem `?` em vez de `*` no campo de dia do mês ou dia da semana — `cron(0 9 ? * MON-FRI *)` é a tradução EventBridge do cron padrão de dias úteis às 9h. Usado para invocações Lambda agendadas, execuções de tarefas ECS e arranques de máquinas de estado Step Functions; o desalinhamento com a sintaxe cron clássica é a principal fonte de erros `ValidationException` em publicações CloudFormation.
Como é uma expressão cron real?
Tome 0 9 * * 1-5 — executa às 9h00, todos os dias úteis. Lendo os campos da esquerda para a direita: 0 é o minuto zero da hora, 9 são as 9h no relógio de 24 horas, * no dia do mês significa todos os dias do calendário, * no mês significa todos os meses, e 1-5 no dia da semana restringe a execução de segunda a sexta (onde 1 = segunda na numeração cron padrão). Cole isso na entrada acima e o parser confirma Às 09:00, de segunda a sexta com as próximas dez datas renderizadas na zona IANA que selecionar. A mesma intenção em sintaxe AWS EventBridge é cron(0 9 ? * MON-FRI *) — note o campo do ano no final e o ? onde o cron padrão usaria *. A mesma intenção como expressão Quartz (seis campos com segundos iniciais) é 0 0 9 ? * MON-FRI. Três plataformas diferentes, três formas superficiais diferentes, um agendamento subjacente.
As expressões cron são implacáveis exatamente de uma forma: um erro de digitação produz um agendamento sintaticamente válido que executa na hora errada, sem nenhum erro para detetar na revisão de código. Ler `0 0 1 * *` e saber que corre à meia-noite no primeiro de cada mês, não a 1 de janeiro, exige prática. O parser acima transforma essa prática numa verificação de dez segundos — cole a expressão, leia o texto em português, examine as próximas dez execuções no seu fuso local, e publique o YAML sabendo que a linha cron realmente faz o que a mensagem de commit diz que faz.
Qual é a diferença entre cron de 5 e 6 campos?
O cron de cinco campos é a gramática Unix clássica com resolução de um minuto. O cron de seis campos adiciona uma coluna de segundos inicial para agendamento de sub-minuto — usado pelo Quartz e pelo @Scheduled do Spring. O AWS EventBridge também usa seis campos, mas a sua coluna extra é um ano final, não segundos.
O que significam @hourly, @daily e @weekly?
Atalhos do Vixie-cron introduzidos em 1987. @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. @reboot executa uma vez no arranque. O GitHub Actions e o EventBridge rejeitam estes atalhos.
Domingo é o dia 0 ou o dia 7 em cron?
Ambos, no cron Vixie clássico — 0 e 7 são aceites para que intervalos como 5-7 se leiam naturalmente como sexta a domingo. Segunda é sempre 1, sábado é sempre 6. O Quartz e o AWS EventBridge usam uma convenção diferente: 1-7 com domingo como 1. Consulte a documentação da plataforma antes de assumir.
Como é que o cron lida com a mudança de hora?
Depende do fuso horário do motor. Em UTC (o padrão no EventBridge, Kubernetes e GitHub Actions) a mudança de hora não existe. Num fuso com horário de verão, o cron Vixie clássico ignora tarefas durante o avanço da hora da primavera e executa-as duas vezes durante o recuo do outono; os temporizadores systemd executam exatamente uma vez.