Expressões Cron Explicadas: Guia Completo de Sintaxe

· 12 min de leitura

📑 Índice

Cron é o agendador de tarefas baseado em tempo em sistemas operacionais tipo Unix. Se você precisa executar um script à meia-noite, fazer backup de um banco de dados todo domingo, limpar arquivos temporários a cada hora ou enviar relatórios no primeiro dia de cada mês, cron é sua ferramenta. Mas sua sintaxe de expressão — aquelas strings enigmáticas como 0 */6 * * 1-5 — pode ser intimidante no início.

Este guia desmistifica completamente as expressões cron. Você aprenderá cada campo, cada caractere especial, verá dezenas de padrões do mundo real e entenderá as armadilhas de fuso horário que confundem até desenvolvedores experientes. Seja agendando backups, executando scripts de manutenção ou automatizando relatórios, dominar a sintaxe cron é essencial para qualquer desenvolvedor ou administrador de sistemas.

Anatomia de uma Expressão Cron

Uma expressão cron padrão tem cinco campos separados por espaços. Cada campo representa uma unidade de tempo e, juntos, eles definem exatamente quando sua tarefa deve ser executada.

┌───────────── minuto (0-59)
│ ┌─────────── hora (0-23)
│ │ ┌───────── dia do mês (1-31)
│ │ │ ┌─────── mês (1-12)
│ │ │ │ ┌───── dia da semana (0-6, Dom=0)
│ │ │ │ │
* * * * *  comando a executar

Cada campo pode conter um número, um intervalo, uma lista, um valor de incremento ou um curinga. A beleza do cron é que esses blocos de construção simples se combinam para criar padrões de agendamento incrivelmente flexíveis.

Algumas implementações de cron suportam um sexto campo para segundos e um sétimo para ano, mas o formato padrão de cinco campos é universalmente suportado e é o que você encontrará na maioria dos sistemas tipo Unix, incluindo Linux, macOS e variantes BSD.

Os Cinco Campos em Detalhe

Entender o intervalo e o comportamento de cada campo é crucial para escrever expressões cron corretas. Vamos examinar cada um sistematicamente.

Campo Intervalo Caracteres Especiais Exemplo
Minuto 0-59 * , - / */15 (a cada 15 min)
Hora 0-23 * , - / 9-17 (9h às 17h)
Dia do Mês 1-31 * , - / L W 1,15 (dia 1 e 15)
Mês 1-12 ou JAN-DEZ * , - / 1-6 (Jan a Jun)
Dia da Semana 0-6 ou DOM-SAB * , - / L # 1-5 (Seg a Sex)

Campo Minuto (0-59)

O campo minuto controla em qual minuto da hora sua tarefa é executada. Um valor de 0 significa o início da hora, 30 significa meia hora, e 59 é o último minuto da hora.

Padrões comuns incluem */5 para a cada 5 minutos, 0,30 para duas vezes por hora, ou 15 para quinze minutos após cada hora.

Campo Hora (0-23)

As horas usam formato de 24 horas onde 0 é meia-noite, 12 é meio-dia e 23 é 23h. Esta é uma das fontes mais comuns de confusão para desenvolvedores acostumados com a notação AM/PM de 12 horas.

Horário comercial é tipicamente representado como 9-17 (9h às 17h), enquanto manutenção noturna pode usar 0-6 (meia-noite às 6h).

Campo Dia do Mês (1-31)

Este campo especifica qual dia do mês executar. Valores válidos são 1 a 31, embora nem todos os meses tenham 31 dias. O cron lida com isso graciosamente — se você especificar o dia 31 em fevereiro, a tarefa simplesmente não será executada naquele mês.

O caractere especial L significa "último dia do mês" e se ajusta automaticamente para o comprimento do mês e anos bissextos.

Campo Mês (1-12)

Os meses podem ser especificados numericamente (1 para janeiro até 12 para dezembro) ou usando abreviações de três letras (JAN, FEV, MAR, etc.). As abreviações não diferenciam maiúsculas de minúsculas na maioria das implementações.

Agendamentos trimestrais frequentemente usam padrões como 1,4,7,10 (janeiro, abril, julho, outubro) ou 3,6,9,12 para fins de trimestre fiscal.

Campo Dia da Semana (0-6)

Os dias da semana variam de 0 (domingo) a 6 (sábado). Alguns sistemas também aceitam 7 como domingo por conveniência. Abreviações de três letras (DOM, SEG, TER, etc.) também são suportadas.

O padrão mais comum é 1-5 para dias úteis (segunda a sexta-feira), enquanto 0,6 ou 6,0 representa fins de semana.

Dica profissional: Quando tanto o dia do mês quanto o dia da semana são especificados (não curingas), a tarefa é executada quando qualquer condição é atendida (lógica OU), não ambas. Isso pega muitos desenvolvedores desprevenidos. Por exemplo, 0 0 13 * 5 executa no dia 13 de cada mês e toda sexta-feira, não apenas sexta-feira 13.

Caracteres Especiais Explicados

Os caracteres especiais são o que dão às expressões cron seu poder e flexibilidade. Cada caractere serve a um propósito específico na definição de padrões de agendamento.

Asterisco (*) - Curinga

O asterisco significa "todos os valores possíveis" para aquele campo. É o caractere especial mais comumente usado e aparece em quase todas as expressões cron.

Vírgula (,) - Separador de Lista

As vírgulas permitem especificar múltiplos valores discretos. Isso é perfeito quando você precisa de horários específicos e não consecutivos.

Hífen (-) - Operador de Intervalo

Os hífens definem intervalos inclusivos, facilitando a especificação de períodos contínuos.

Barra (/) - Valores de Incremento

A barra especifica intervalos de incremento, permitindo executar tarefas em intervalos regulares dentro de um intervalo. A sintaxe é início/incremento ou */incremento para todo o intervalo.

Dica rápida: */15 não significa "a cada 15 minutos a partir de agora" — significa nos minutos 0, 15, 30 e 45 de cada hora. Se você adicionar uma tarefa cron às 10:07, um padrão */15 será executado primeiro às 10:15, não às 10:22.

L - Último Dia

O caractere L significa "último" e é usado nos campos dia do mês e dia da semana. É particularmente útil para processamento de fim de mês que precisa considerar comprimentos variáveis de mês.

W - Dia Útil Mais Próximo

O caractere W encontra o dia útil mais próximo de um determinado dia do mês. Se o dia especificado cair em um fim de semana, a tarefa é executada no dia útil mais próximo.

Cerquilha (#) - Enésimo Dia da Semana

O caractere cerquilha especifica a enésima ocorrência de um dia da semana dentro de um mês. A sintaxe é dia#ocorrência.

Note que L, W e # não são suportados em todas as implementações de cron. Eles estão disponíveis em versões modernas como Vixie cron e na maioria dos agendadores baseados em nuvem, mas podem não funcionar em sistemas Unix mais antigos.

Padrões Cron Comuns

Vamos ver padrões de agendamento do mundo real que você usará regularmente. Estes exemplos cobrem os cenários de automação mais comuns.

A Cada Minuto, Hora e Dia

Múltiplas Vezes Por Dia

Agendamentos Semanais

Agendamentos Mensais

Horário Comercial e Janelas de Manutenção

Caso de Uso Expressão Cron Descrição
Backup de banco de dados 0 2 * * * Diariamente às 2h
Rotação de logs 0 0 * * 0 Semanalmente no domingo à meia-noite
Limpeza de cache