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
7Uma 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ão | Intervalo | Significado |
|---|---|---|
| * * * * * | min hod dom mes dow | Os 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. |
| minute | 0-59 | Primeiro campo |
| hour | 0-23 | Segundo campo, num relógio de 24 horas |
| day of month | 1-31 | Terceiro campoUm dia que não existe num determinado mês é simplesmente saltado — 31 dispara sete vezes por ano, não doze. |
| month | 1-12 | Quarto campo |
| day of week | 0-7 | Quinto campo, domingo primeiroTanto 0 como 7 significam domingo, é por isso que o intervalo vai até sete em vez de seis. |
| 0 5 13 * 5 | Quando 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
10Os mesmos quatro operadores funcionam em cada campo; apenas os números que aceitam mudam.
| Expressão | Intervalo | Significado |
|---|---|---|
| * | Cada valor que o campo permite | |
| 1,15,30 | Uma lista de valores individuais | |
| 9-17 | Um intervalo inclusivo | |
| */15 | Cada 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/2 | Cada n-ésimo valor dentro de um intervalo | |
| 5/10 | Cada n-ésimo valor a partir de um ponto de partida até ao fim do campo | |
| 0,30 9-17 * * 1-5 | Os operadores combinam livremente, em qualquer campoNa meia hora, entre as nove e as cinco, segunda a sexta. | |
| JAN-DEC | 1-12 | Nomes de meses, três letras, case-insensitive |
| SUN-SAT | 0-6 | Nomes de dias, três letras, case-insensitive |
| 7 | 0 | Domingo, escrito do outro modo |
Macros de abreviação
7Sete 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ão | Intervalo | Significado |
|---|---|---|
| @hourly | 0 * * * * | No topo de cada hora |
| @daily | 0 0 * * * | Uma vez por dia à meia-noite |
| @midnight | 0 0 * * * | O mesmo que @daily |
| @weekly | 0 0 * * 0 | Uma vez por semana, domingo à meia-noite |
| @monthly | 0 0 1 * * | Dia primeiro do mês à meia-noite |
| @yearly | 0 0 1 1 * | Primeiro de janeiro à meia-noite |
| @annually | 0 0 1 1 * | O mesmo que @yearly |
Exemplos prontos
14Leia 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ão | Intervalo | Significado |
|---|---|---|
| * * * * * | 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-5 | A cada quinze minutos durante o horário comercial em dias úteis | |
| 0 8 * * 1-5 | Dias úteis às 08:00 | |
| 0 10 * * 6,0 | Sábados e domingos às 10:00 | |
| 30 7 * * MON | Segundas-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
6Quartz, 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ão | Intervalo | Significado |
|---|---|---|
| ? | "Sem valor específico", no campo de dia que o outro já restringe | |
| L | O último dia do mês, ou o último dia da semana dado | |
| 15W | O dia útil mais próximo do 15º | |
| FRI#3 | A 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. | |
| @reboot | Executar 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. |