Explicar expressão cron
Entenda um agendamento do crontab em linguagem simples e veja as próximas vezes em que ele vai rodar, em qualquer fuso horário.
Funciona inteiramente no seu navegador
- Minuto
- Hora
- Dia do mês
- Mês
- Dia da semana
Próximas execuções
Cron padrão de cinco campos (minuto, hora, dia do mês, mês, dia da semana), como no Vixie cron, no cronie e na maioria dos sistemas Linux, além dos atalhos no estilo @daily. Quartz e outros formatos com campo de segundos são detectados, mas não explicados.
Como conferir uma expressão cron
- Digite ou cole os cinco campos do agendamento, como
*/15 9-17 * * 1-5, ou escolha um exemplo. Uma linha completa do crontab também funciona; o comando depois do quinto campo é ignorado. - Leia o resumo em linguagem simples e o detalhamento de cada campo. Um erro é apontado no campo onde ele acontece.
- Confira a lista das próximas execuções. Escolha o fuso horário em que o servidor roda e, se quiser olhar mais adiante, outro horário de início.
Como ler um agendamento cron
Para explicar uma expressão cron, vale lembrar como o cron trabalha: ele confere a sua tabela uma vez por minuto e executa todo job cujos cinco campos correspondem ao horário atual, com uma exceção para os dois campos de dia, descrita abaixo. Assim, */15 9-17 * * 1-5 significa: nos minutos 0, 15, 30 e 45, das 9 às 17 horas, em qualquer dia do mês, em qualquer mês, de segunda a sexta. A última execução do dia é às 17:45, porque o campo de hora cobre a hora 17 inteira.
O explicador interpreta cada campo como o Vixie cron e o cronie, que é o que a maioria das distribuições Linux traz. Nomes de meses e dias da semana são aceitos em maiúsculas ou minúsculas, e 7 conta como domingo. Um passo depois de um número único, como 5/10, é lido como 5-59/10, do jeito que muitas versões do cron leem; algumas mais antigas o rejeitam, então a ferramenta lembra você de escrever o intervalo por extenso. Intervalos precisam ir do menor para o maior: FRI-MON é sinalizado em vez de dar a volta, porque o cron padrão não dá a volta em intervalos.
As próximas execuções são calculadas percorrendo o calendário no fuso horário que você escolher, então uma expressão que só pode corresponder a 29 de fevereiro encontra o próximo ano bissexto na hora, e uma que nunca corresponde, como 0 0 31 2 *, é informada como algo que nunca roda.
Dicas
- Transforme um horário de execução de um log em timestamp Unix, ou o contrário, com o Conversor de timestamp Unix.
- Testando o padrão que um job usa para filtrar o log? Experimente o Testador de regex.
- Veja como fica uma configuração JSON com agendamentos usando Formatar e validar JSON.
Perguntas frequentes
O que significam os cinco campos?
Em ordem: minuto (0-59), hora (0-23), dia do mês (1-31), mês (1-12 ou JAN-DEC) e dia da semana (0-7 ou SUN-SAT, em que tanto 0 quanto 7 são domingo). Cada campo aceita um valor único, uma lista como 1,15, um intervalo como 9-17, um passo como */15 ou 0-30/10, ou * para todos os valores.
Por que meu job roda em mais dias do que eu esperava?
Quando os campos de dia do mês e de dia da semana estão ambos restritos, o cron roda nos dias que correspondem a qualquer um dos dois, não aos dois ao mesmo tempo. 0 9 1 * 1 roda no dia 1º de todo mês e em toda segunda-feira. É assim que o Vixie cron e o cronie se comportam. Uma peculiaridade da mesma regra: um campo que começa com *, como */2, conta como não restrito, e então os dois campos precisam corresponder.
Qual fuso horário o cron usa?
O fuso da máquina ou do contêiner em que ele roda, a menos que o crontab defina CRON_TZ ou TZ. Muitos servidores rodam em UTC, então confira isso antes de confiar nos horários que você vê. Escolha o fuso do servidor na lista para ver os horários de execução dele.
O que acontece quando o relógio muda por causa do horário de verão?
A lista segue o relógio do fuso que você escolher: um horário pulado quando os relógios são adiantados fica de fora, e um horário que acontece duas vezes quando eles são atrasados aparece uma só vez. O Vixie cron e o cronie executam um job agendado em uma hora pulada logo após a mudança e não repetem jobs na hora repetida; outros agendadores variam. Um aviso aparece quando um período listado inclui uma mudança.
Aceita segundos ou a sintaxe do Quartz?
Não. Expressões com seis ou sete campos, ou com ?, L, W ou #, vêm do Quartz, do Spring e de agendadores parecidos, em que o primeiro campo é de segundos. A ferramenta avisa isso em vez de tentar adivinhar, porque lê-las como cron padrão daria o agendamento errado.
O que significam @daily, @hourly e os outros atalhos?
@hourly é 0 * * * *, @daily e @midnight são 0 0 * * *, @weekly é 0 0 * * 0, @monthly é 0 0 1 * *, e @yearly e @annually são 0 0 1 1 *. @reboot roda uma vez quando o serviço cron inicia, então não tem horários para listar.