Desenvolvimento · 4 min de leitura ·

Expressões cron explicadas, com 10 exemplos prontos para usar

Cinco campos, quatro símbolos e uma armadilha de fuso horário. Aprenda a ler e escrever agendamentos cron com exemplos para copiar.

O cron é o agendador por trás de backups, relatórios e rotinas de limpeza em servidores no mundo todo, e a sintaxe dele também aparece no GitHub Actions, nos CronJobs do Kubernetes e na maioria dos agendadores em nuvem. Um agendamento são 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-6, 0 = domingo)
* * * * *

Quatro símbolos

* significa qualquer valor. A vírgula forma uma lista (1,15), o hífen um intervalo (1-5) e a barra um passo (*/15 = a cada 15 unidades). Esses quatro cobrem quase todo agendamento.

10 exemplos

*/5 * * * *       a cada 5 minutos
0 * * * *         toda hora cheia
0 9 * * *         todo dia às 09:00
30 2 * * *        toda noite às 02:30
0 9 * * 1-5       de segunda a sexta às 09:00
0 18 * * 5        às sextas às 18:00
0 0 1 * *         meia-noite do dia 1 de cada mês
0 0 1 1 *         uma vez por ano, em 1º de janeiro
0 */6 * * *       a cada 6 horas
15 8,12,17 * * *  às 08:15, 12:15 e 17:15 todo dia

Armadilha 1: dia do mês e dia da semana

Quando os dois campos estão restritos, o cron clássico roda a tarefa quando qualquer um deles bate. 0 0 1 * 1 roda no dia 1 de cada mês e também toda segunda-feira, não só nas segundas que caem no dia 1.

Armadilha 2: o fuso horário

O cron não tem fuso horário próprio. A tarefa roda no fuso da máquina ou do serviço que a executa, que muitas vezes é UTC. Uma tarefa com 0 9 * * * num servidor UTC roda às 09:00 UTC, que podem ser horas antes ou depois no seu fuso, e o horário de verão pode mudá-la de novo.

Armadilha 3: execuções sobrepostas e perdidas

O cron inicia uma tarefa no horário, tenha a execução anterior terminado ou não. Um backup agendado a cada 5 minutos que leva 7 minutos acaba rodando duas vezes ao mesmo tempo. Envolva tarefas longas em uma trava (no Linux, o flock faz isso em uma linha) ou torne seguro executá-las em paralelo. O cron também não recupera o atraso: se a máquina estiver desligada às 02:30, a tarefa das 02:30 simplesmente não roda naquela noite.

*/5 * * * *  flock -n /tmp/backup.lock /usr/local/bin/backup.sh

Atalhos e pequenas diferenças

Muitas implementações de cron aceitam atalhos como @hourly, @daily, @weekly, @monthly e @reboot no lugar dos cinco campos. Na maioria delas o domingo pode ser escrito como 0 ou 7, e nomes como MON ou JAN são permitidos. As plataformas diferem nos detalhes, então consulte a documentação do sistema que vai executar a tarefa, principalmente em agendadores gerenciados na nuvem.

Para onde vai a saída?

Por padrão, o cron envia a saída da tarefa por e-mail ao usuário local, o que na maioria dos servidores significa que ela some. Redirecione a saída para um arquivo de log ou para o seu sistema de logs, para que uma tarefa com falha deixe rastro:

30 2 * * *  /usr/local/bin/report.sh >> /var/log/report.log 2>&1

Confira antes de publicar

Cole uma expressão no explicador de expressões cron da 4Dev e ele lê o agendamento em linguagem simples. Ele aceita o formato padrão de cinco campos; expressões de seis ou sete campos com segundos ou anos, como as do Quartz ou do Spring, são recusadas com um erro.

Abrir o explicador de expressões cron

LinkedInXFacebook