Interpretador de cron online

O interpretador de cron traduz uma expressão cron, como */15 9-17 * * 1-5, para uma frase em português e mostra os próximos horários em que ela vai executar, no seu fuso horário ou em UTC. Ele lê o cron padrão de 5 campos (minuto, hora, dia do mês, mês e dia da semana) e aponta o campo com erro. Tudo roda no seu navegador.

Atualizado em · Por Leonardo Gaertner

Exemplos

    Achou um resultado errado ou tem uma sugestão? Avise por e-mail.

    Como usar

    1. Digite ou cole a expressão cron, ou clique em um dos exemplos.
    2. Leia a explicação em português e confira o valor que cada campo assume.
    3. Veja as próximas 10 execuções e alterne entre o seu fuso horário e UTC.

    Como funciona

    Uma expressão cron tem cinco campos separados por espaço, nesta ordem: minuto (0 a 59), hora (0 a 23), dia do mês (1 a 31), mês (1 a 12, ou JAN a DEC) e dia da semana (0 a 6, ou SUN a SAT, em que 0 e 7 são domingo). Cada campo aceita *, que é qualquer valor, listas com vírgula (1,15), faixas (9-17) e passos (*/10, que é de 10 em 10).

    Atalhos como @hourly, @daily, @weekly, @monthly e @yearly equivalem a expressões prontas, como 0 0 * * * para @daily. O @reboot roda uma vez quando o sistema inicia e não tem horários para calcular.

    Quando o dia do mês e o dia da semana estão os dois restritos, o cron padrão executa se qualquer um dos dois casar. Assim, 0 0 13 * 5 roda todo dia 13 e também toda sexta-feira, e não só nas sextas-feiras 13. Se um dos dois começa com *, os dois precisam casar. O cron roda no fuso horário do servidor ou do agendador, então confira qual é o dele: o GitHub Actions, por exemplo, usa UTC.

    Exemplo

    Expressão: */15 9-17 * * 1-5

    Campos: minuto */15, hora 9-17, dia do mês *, mês *, dia da semana 1-5

    Significado: a cada 15 minutos, entre 09:00 e 17:59, de segunda-feira a sexta-feira.

    Fonte: crontab(5): formato do arquivo crontab (manual do Linux)

    Em código

    Muitos agendadores, como o GitHub Actions, rodam o cron em UTC. Esta função converte um horário de Brasília (UTC-3) para a expressão em UTC, ajustando o dia da semana quando passa da meia-noite.

    JavaScript
    // Brasília é UTC-3 o ano todo (não há horário de verão desde 2019).
    // diasDaSemana: '*' ou uma lista como '1,3,5' (0 = domingo).
    function cronDeBrasilia(minuto, hora, diasDaSemana = '*') {
      const horaUtc = hora + 3;
      let dias = diasDaSemana;
      // Das 21h em diante, em UTC já é o dia seguinte: o dia da semana anda junto
      if (horaUtc >= 24 && dias !== '*') {
        dias = dias.split(',').map((d) => (Number(d) + 1) % 7).join(',');
      }
      return `${minuto} ${horaUtc % 24} * * ${dias}`;
    }
    Python
    # Brasília é UTC-3 o ano todo (não há horário de verão desde 2019).
    # dias_da_semana: "*" ou uma lista como "1,3,5" (0 = domingo).
    def cron_de_brasilia(minuto: int, hora: int, dias_da_semana: str = "*") -> str:
        hora_utc = hora + 3
        dias = dias_da_semana
        # Das 21h em diante, em UTC já é o dia seguinte: o dia da semana anda junto
        if hora_utc >= 24 and dias != "*":
            dias = ",".join(str((int(d) + 1) % 7) for d in dias.split(","))
        return f"{minuto} {hora_utc % 24} * * {dias}"
    PHP
    <?php
    // Brasília é UTC-3 o ano todo (não há horário de verão desde 2019).
    // $diasDaSemana: '*' ou uma lista como '1,3,5' (0 = domingo).
    function cronDeBrasilia(int $minuto, int $hora, string $diasDaSemana = '*'): string
    {
        $horaUtc = $hora + 3;
        $dias = $diasDaSemana;
        // Das 21h em diante, em UTC já é o dia seguinte: o dia da semana anda junto
        if ($horaUtc >= 24 && $dias !== '*') {
            $dias = implode(',', array_map(fn($d) => ((int) $d + 1) % 7, explode(',', $dias)));
        }
        return sprintf('%d %d * * %s', $minuto, $horaUtc % 24, $dias);
    }

    Perguntas frequentes

    Por que a minha expressão executa mais vezes do que eu esperava?

    Provavelmente porque o dia do mês e o dia da semana estão os dois preenchidos. No cron padrão, basta um dos dois casar. Para executar só quando os dois casam, a solução comum é deixar um deles como * e checar a outra condição dentro do próprio script.

    Qual a diferença entre cron de 5 e de 6 campos?

    O cron padrão do Unix tem 5 campos. O Quartz e o Spring acrescentam os segundos no começo, e o AWS EventBridge usa 6 campos com o ano no fim e exige ? em um dos campos de dia. Esta ferramenta lê só o cron de 5 campos e avisa quando recebe outro formato.

    */7 significa mesmo a cada 7 minutos?

    Quase. O passo reinicia a cada hora: roda nos minutos 0, 7, 14 e assim até 56, e volta ao minuto 0 da hora seguinte, só 4 minutos depois. Para intervalos exatos, use passos que dividem 60, como */5, */10, */15 e */30.

    Em que fuso horário o cron roda?

    No do servidor ou do serviço que executa o agendamento, que costuma ser UTC em serviços de nuvem e de CI. A ferramenta mostra os próximos horários no seu fuso e em UTC para você comparar.

    O que significam 0 e 7 no dia da semana?

    Os dois são domingo. Por isso 0-6 e 1-7 cobrem a semana inteira, e 1-5 vai de segunda a sexta.