TanodTools
PT

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

Deixe em branco para começar de agora.

    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

    1. 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.
    2. Leia o resumo em linguagem simples e o detalhamento de cada campo. Um erro é apontado no campo onde ele acontece.
    3. 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

    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.