Ir para o conteúdo

Sintaxe de expressões cron

Uma expressão cron é cinco campos que descrevem quando algo deve ser executado. Cada campo diz quais valores da sua unidade são aceitáveis, e a tarefa dispara em cada minuto em que todos os cinco concordam. Este é o modelo inteiro: não há conceito de duração, não há "a cada 90 minutos", e nenhum estado de próxima execução é mantido em qualquer lugar.

Os campos são lidos da esquerda para a direita como minuto, hora, dia do mês, mês, dia da semana. Os exemplos no fundo são aqueles por que as pessoas realmente procuram, e cada um deles é analisado pelo seu próprio analisador cron do site antes desta página ser construída.

A última secção lista sintaxe que parece cron mas não é aceite aqui: extensões Quartz e Jenkins, e o formulário de seis campos com segundos. Vale a pena reconhecê-los, porque uma expressão copiada que use uma irá simplesmente falhar.

Os cinco campos

7

Uma linha cron é cinco campos separados por espaço em branco, depois o comando. Cada campo tem de estar presente; não há forma de omitir um.

ExpressãoIntervaloSignificado
* * * * *min hod dom mes dowOs cinco campos em ordem: minuto, hora, dia do mês, mês, dia da semanaCinco asteriscos significa cada minuto de cada dia — a expressão mais frouxa possível.
minute0-59Primeiro campo
hour0-23Segundo campo, num relógio de 24 horas
day of month1-31Terceiro campoUm dia que não existe num determinado mês é simplesmente saltado — 31 dispara sete vezes por ano, não doze.
month1-12Quarto campo
day of week0-7Quinto campo, domingo primeiroTanto 0 como 7 significam domingo, é por isso que o intervalo vai até sete em vez de seis.
0 5 13 * 5Quando ambos os campos de dia estão restritos, cron dispara em qualquer um — não em ambosIsto corre no 13º e em todas as sextas, portanto não é "sexta-feira 13". É a única regra de cron que surpreende toda a gente.

Operadores

10

Os mesmos quatro operadores funcionam em cada campo; apenas os números que aceitam mudam.

ExpressãoIntervaloSignificado
*Cada valor que o campo permite
1,15,30Uma lista de valores individuais
9-17Um intervalo inclusivo
*/15Cada n-ésimo valor em todo o campo*/15 no campo de minutos significa :00, :15, :30 e :45 — conta a partir do fundo do intervalo, não a partir de agora.
9-17/2Cada n-ésimo valor dentro de um intervalo
5/10Cada n-ésimo valor a partir de um ponto de partida até ao fim do campo
0,30 9-17 * * 1-5Os operadores combinam livremente, em qualquer campoNa meia hora, entre as nove e as cinco, segunda a sexta.
JAN-DEC1-12Nomes de meses, três letras, case-insensitive
SUN-SAT0-6Nomes de dias, três letras, case-insensitive
70Domingo, escrito do outro modo

Macros de abreviação

7

Sete nomes que representam uma expressão inteira. São uma conveniência do formato de ficheiro crontab em vez de parte da gramaática de campos, portanto um agendador que lê strings cron não necessariamente os aceita.

ExpressãoIntervaloSignificado
@hourly0 * * * *No topo de cada hora
@daily0 0 * * *Uma vez por dia à meia-noite
@midnight0 0 * * *O mesmo que @daily
@weekly0 0 * * 0Uma vez por semana, domingo à meia-noite
@monthly0 0 1 * *Dia primeiro do mês à meia-noite
@yearly0 0 1 1 *Primeiro de janeiro à meia-noite
@annually0 0 1 1 *O mesmo que @yearly

Exemplos prontos

14

Leia um da direita para a esquerda quando deixar de fazer sentido: o campo mais grosseiro está à direita e decide se os mais finos são sequer consultados.

ExpressãoIntervaloSignificado
* * * * *Cada minuto
*/5 * * * *A cada cinco minutos
0 * * * *Cada hora, no topo da hora
0,30 * * * *Cada meia hora
0 3 * * *Cada dia às 03:00
0 9,17 * * *Duas vezes por dia, às 09:00 e 17:00
*/15 9-17 * * 1-5A cada quinze minutos durante o horário comercial em dias úteis
0 8 * * 1-5Dias úteis às 08:00
0 10 * * 6,0Sábados e domingos às 10:00
30 7 * * MONSegundas-feiras às 07:30
0 0 1 * *Meia-noite no primeiro de cada mês
0 0 28-31 * *Cada dia no último troço do mêsO cron padrão não tem "último dia do mês". Isto dispara até quatro vezes; um script que verifica a data e sai cedo é a correcção habitual.
0 0 1 1,4,7,10 *Meia-noite no primeiro dia de cada trimestre
0 0 1 1 *Uma vez por ano, no início de 1 de janeiro

Extensões que este site não aceita

6

Quartz, Jenkins e alguns agendadores em nuvem adicionam estas. São listadas para reconhecer em crontab alheio — o analisador aqui rejeita cada uma, assim como o cron enviado com Linux.

ExpressãoIntervaloSignificado
?"Sem valor específico", no campo de dia que o outro já restringe
LO último dia do mês, ou o último dia da semana dado
15WO dia útil mais próximo do 15º
FRI#3A terceira sexta-feira do mês
*/30 * * * * *Um sexto campo para segundos, à frenteSeis campos, não cinco. Quartz e várias bibliotecas de nível de linguagem usam este formulário; o ficheiro crontab não.
@rebootExecutar uma vez quando a máquina iniciaReal em crontab, mas não é um agendamento — não há próxima execução a calcular, é por isso que o analisador aqui o declina.

FAQ

Porque é que a minha tarefa "sexta-feira 13" corria todas as sextas?
Porque quando ambos os campos dia-do-mês e dia-da-semana estão restritos, cron trata-os como um ou outro, não como ambos. 0 5 13 * 5 dispara no 13º e em todas as sextas. Obter uma verdadeira sexta-feira 13 requer uma verificação de data dentro do script.
Significa */5 "cinco minutos a partir de agora"?
Não. Os passos contam a partir do fundo do intervalo do campo, não do momento em que instala a tarefa, por isso */5 no campo de minutos significa :00, :05, :10 e assim por diante — independentemente de quando foi escrito.
Que fuso horário cron usa?
O do sistema, a menos que o crontab defina CRON_TZ ou TZ no topo. Isto importa duas vezes por ano: uma tarefa agendada dentro da hora que uma mudança de horário de verão salta não corre, e uma dentro da hora que se repete pode correr duas vezes.
É 0 o mesmo que 7 no campo dia-da-semana?
Sim, ambos são domingo. O duplicado existe para que um intervalo como 1-7 cobrindo segunda a domingo possa ser escrito naturalmente, o que um campo 0-6 não consegue expressar num intervalo.
Onde posso testar uma expressão?
O analisador cron neste site toma uma expressão e mostra as próximas execuções em linguagem clara, localmente no seu navegador. O construtor ao lado funciona ao contrário: escolha um agendamento e escreve a expressão.