Os cinco campos
Uma expressão cron são cinco campos separados por espaços que dizem a um agendador quando rodar uma tarefa:
Na ordem, da esquerda para a direita:
| Minuto | 0-59 |
| Hora | 0-23 |
| Dia do mês | 1-31 |
| Mês | 1-12 |
| Dia da semana | 0-6 (domingo = 0) |
A tarefa roda sempre que o horário atual coincide com todos os campos.
Caracteres especiais
*qualquer valor.,uma lista:1,15é o dia 1 e o dia 15.-um intervalo:1-5é de segunda a sexta no último campo./um passo:*/10no campo de minutos é a cada 10 minutos.
Agendamentos comuns
*/5 * * * * | A cada 5 minutos |
0 * * * * | A cada hora cheia |
0 0 * * * | Todo dia à meia-noite |
30 8 * * 1-5 | Às 08:30 nos dias úteis |
0 0 1 * * | À meia-noite do dia 1 de cada mês |
0 3 * * 0 | Às 03:00 todo domingo |
Cole qualquer expressão no Explicador de expressões cron para ler em palavras e ver as próximas execuções.
O que costuma confundir
- Fuso horário: o cron usa o relógio do servidor, que muitas vezes está em UTC.
- Dia do mês e dia da semana juntos: se os dois estiverem definidos, a tarefa roda quando qualquer um coincidir, não os dois.
- Segundos: o cron padrão não tem campo de segundos. Alguns sistemas, como Quartz e Spring, acrescentam um no início, ficando com seis campos.
Expressões que não fazem o que parecem
| Expressão | A intenção | O que realmente roda |
|---|---|---|
0 9 1-7 * 1 | 09:00 na primeira segunda-feira | 09:00 em cada dia de 1 a 7, e em toda segunda-feira |
*/15 9-17 * * 1-5 | A cada 15 minutos, das 9 às 17 | Das 09:00 às 17:45 em dias úteis, incluindo a hora das 17 |
0 0 31 * * | O último dia do mês | Só nos sete meses com 31 dias |
0 0 29 2 * | Uma vez por ano | Só em anos bissextos |
Para a primeira segunda-feira, rode nos dias 1 a 7 e confira o dia da semana dentro do script.
Atalhos
Muitas versões do cron aceitam apelidos: @hourly, @daily, @weekly, @monthly, @yearly e @reboot, que roda uma vez quando a máquina liga.
Horário de verão
Num servidor que segue a hora local, uma tarefa marcada entre 01:00 e 03:00 pode ser pulada na noite em que o relógio adianta, ou rodar duas vezes quando atrasa, dependendo da versão do cron. Marque tarefas importantes fora desse horário, ou use UTC no servidor.