Saltar para o conteúdo
Toolbrik
Voltar ao blog

Guia rápido de cron: sintaxe e 20 exemplos prontos a copiar

5 min de leituraFerramenta relacionada: Analisador de Expressões Cron

O cron é o agendador de tarefas dos sistemas Unix, e a sua sintaxe infiltrou-se em todo o lado: servidores Linux, Kubernetes, GitHub Actions, funções serverless, Laravel, Spring… Aprendê-la demora dez minutos. Esquecê-la, ainda menos. Este guia foi pensado para ter sempre à mão.

Os cinco campos

Uma expressão cron clássica tem cinco campos separados por espaços:

┌───────────── minuto (0–59)
│ ┌─────────── hora (0–23)
│ │ ┌───────── dia do mês (1–31)
│ │ │ ┌─────── mês (1–12 ou JAN–DEC)
│ │ │ │ ┌───── dia da semana (0–7 ou SUN–SAT; 0 e 7 são domingo)
│ │ │ │ │
* * * * *  comando

Cada campo aceita estes operadores:

Símbolo Significa Exemplo Lê-se
* qualquer valor * * * * * a cada minuto
, lista 0 9,14 * * * às 9:00 e às 14:00
- intervalo 0 9-17 * * * a cada hora certa, das 9 às 17 h
/ passo */15 * * * * a cada 15 minutos

20 exemplos de que vais precisar

Expressão Quando corre
* * * * * A cada minuto
*/5 * * * * A cada 5 minutos
*/15 * * * * A cada 15 minutos (:00, :15, :30, :45)
0 * * * * A cada hora, em ponto
30 * * * * A cada hora, e meia
0 */2 * * * A cada 2 horas
0 0 * * * Todos os dias à meia-noite
0 8 * * * Todos os dias às 8:00
30 23 * * * Todos os dias às 23:30
0 9 * * 1-5 De segunda a sexta às 9:00
0 10 * * 6,0 Sábados e domingos às 10:00
0 9-18 * * 1-5 A cada hora das 9 às 18, em dias úteis
0 0 * * 0 Todos os domingos à meia-noite
0 0 1 * * No dia 1 de cada mês
0 0 15 * * No dia 15 de cada mês
0 0 1 1 * A 1 de janeiro (uma vez por ano)
0 0 1 */3 * No primeiro dia de cada trimestre
0 3 * * 1 Às segundas às 3:00 (clássico para backups)
*/10 8-20 * * * A cada 10 minutos entre as 8:00 e as 20:59
0 12 1-7 * 1 ⚠️ Não é «a primeira segunda-feira do mês» (ver abaixo)

Se tiveres dúvidas com uma expressão, cola-a no analisador de cron: mostra as próximas datas em que vai correr. E se preferires construí-la sem escrever a sintaxe, o gerador de cron fá-lo com seletores e explica-a em linguagem natural.

Os atalhos com @

O cron do Linux (e a maioria dos seus derivados) aceita aliases legíveis; o GitHub Actions e outros agendadores na nuvem, não:

Alias Equivale a
@yearly ou @annually 0 0 1 1 *
@monthly 0 0 1 * *
@weekly 0 0 * * 0
@daily ou @midnight 0 0 * * *
@hourly 0 * * * *
@reboot Ao arrancar o sistema

Os 5 erros que mais tarefas estragam

1. Dia do mês e dia da semana combinam-se com «OU», não com «E»

É a armadilha mais famosa. No cron clássico, se restringires ao mesmo tempo o dia do mês e o dia da semana, a tarefa corre quando se cumprir qualquer um dos dois. Assim, 0 12 1-7 * 1 não significa «a primeira segunda-feira do mês ao meio-dia», mas sim «os dias 1 a 7 de cada mês e também todas as segundas-feiras».

A solução habitual é deixar só um dos dois campos e filtrar no próprio comando:

0 12 1-7 * * [ "$(date +\%u)" = 1 ] && /caminho/script.sh

(Num crontab, o % tem de ser escapado como \%: sem a barra, o cron interpreta-o como uma quebra de linha.)

2. O fuso horário não é o que pensas

O cron usa o fuso horário do sistema onde corre. Num servidor configurado em UTC, 0 9 * * * corre às 9:00 UTC, que em Lisboa são as 9:00 no inverno e as 10:00 no verão. Os agendadores geridos costumam usar UTC: o GitHub Actions usa sempre UTC, e os CronJob do Kubernetes usam o fuso do controlador, a menos que indiques timeZone na especificação.

3. A mudança da hora

Se agendares algo entre a 1:00 e as 2:00 da madrugada em Portugal, no dia da mudança da hora pode ser saltado (na primavera essa hora não existe) ou, conforme a implementação, correr duas vezes (no outono repete-se). Para tarefas críticas, evita essa janela ou trabalha em UTC.

4. Os passos não atravessam a hora

*/7 * * * * não corre «a cada 7 minutos» em sentido estrito: corre nos minutos 0, 7, 14… 56, e na hora seguinte volta a começar no 0. Entre o minuto 56 e o 0 só passam 4 minutos. Para intervalos que não dividem 60, o cron não é a ferramenta certa.

5. Cinco campos ou seis

O cron clássico tem cinco campos e resolução de um minuto. Quartz, Spring (@Scheduled) e bibliotecas como node-cron acrescentam um sexto campo no início para os segundos: 0 */5 * * * * é «a cada 5 minutos» no Spring, mas uma expressão inválida num crontab. Quando copiares uma expressão de um sistema para outro, conta os campos.

Como verificar uma expressão antes do deploy

O método mais fiável é ver as próximas execuções reais. Cola a expressão no analisador de cron, escolhe 5 ou 6 campos conforme o teu sistema e revê a lista de datas: se a tua «primeira segunda-feira do mês» também corre no dia 3, caíste no erro número 1. Tudo é calculado no teu browser, por isso podes testar quantas expressões quiseres.