CodeKitHub
Ferramentas de código

Gerador de Expressões Cron

Última atualização:

Uma expressão cron é uma string de cinco campos (minuto, hora, dia do mês, mês, dia da semana) que informa a um agendador como o Unix cron, crontab, ou um pipeline de CI/CD exatamente quando executar uma tarefa — por exemplo, `*/15 9-17 * * MON-FRI` significa "a cada 15 minutos, entre 9h e 17h, de segunda a sexta-feira." Esta ferramenta funciona nas duas direções: monte um agendamento usando menus suspensos simples e obtenha a string cron, ou cole uma expressão cron existente e veja instantaneamente uma tradução em português claro além dos próximos 5 horários em que ela realmente será executada. Ela segue a sintaxe cron POSIX/Vixie padrão de 5 campos usada pelo Unix, Linux crontab e pela maioria dos agendadores de tarefas — consulte a página de manual crontab(5) para a especificação canônica. Tudo é executado localmente no seu navegador; nada do que você digita é enviado para qualquer lugar.

Descrição
Próximas execuções
    Construtor
    Minuto
    Hora
    Dia do mês
    Mês
    Dia da semana
    Guia de sintaxe
    • * — any value
    • , — value list separator (e.g. 1,3,5)
    • - — range of values (e.g. 1-5)
    • / — step values (e.g. */15 = every 15)

    O que é esta ferramenta?

    Uma expressão cron é uma string de agendamento compacta, de cinco campos — `minuto hora dia-do-mês mês dia-da-semana` — usada pelo daemon `cron` do Unix e praticamente todo agendador de tarefas modelado a partir dele (crontab, Kubernetes CronJobs, `schedule:` do GitHub Actions, Airflow, Jenkins). Cada campo aceita um asterisco (`*`, significando "qualquer valor"), um número específico, uma lista separada por vírgulas (`1,15,30`), um intervalo (`9-17`), um passo (`*/15`, significando "a cada 15 unidades") ou — para mês e dia da semana — um nome de três letras (`JAN`, `MON`) em vez de um número.

    A definição canônica dessa sintaxe é a página de manual crontab(5) do Linux, que documenta exatamente os mesmos cinco campos, caracteres especiais (`* , - /`) e as oito strings abreviadas com `@` (`@reboot`, `@yearly`/`@annually`, `@monthly`, `@weekly`, `@daily`/`@midnight`, `@hourly`) que a maioria das implementações de cron, incluindo o Vixie cron (a versão distribuída na maioria das distribuições Linux), suporta como apelidos para agendamentos comuns.

    Esta ferramenta implementa exatamente esse formato padrão de 5 campos — o formato que você colocaria diretamente em `crontab -e` num servidor Linux ou macOS, ou no campo `schedule:` de um CronJob do Kubernetes. Ela não implementa a sintaxe cron do Quartz, que é um formato diferente, de 6 ou 7 campos, usado pelo Quartz Scheduler do Java e por algumas ferramentas de fornecedores (veja a seção de comparação abaixo para saber quando você precisa dele).

    Por que usar?

    • Você herdou o crontab de um colega que saiu da empresa e precisa entender o que uma expressão como `0 3 1,15 * *` realmente faz antes de mexer em produção.
    • Está adicionando um `schedule:` a um workflow do GitHub Actions e quer evitar o erro clássico de trocar a ordem dos campos, o que faria o job rodar num horário completamente diferente do planejado.
    • Está escrevendo o manifesto de um CronJob do Kubernetes e quer conferir, com a prévia dos próximos horários de execução, se o job de madrugada realmente vai rodar no horário certo (considerando o fuso) antes de fazer o deploy.
    • Já caiu na pegadinha do cron em que "dia 8" e "toda segunda-feira" acabam rodando os dois, e agora sempre confere os próximos horários de execução antes de publicar uma expressão que combina dia do mês e dia da semana.
    • Precisa transformar um requisito simples — "a cada 15 minutos, em dias úteis, das 9h às 17h" — numa expressão válida sem errar vírgula ou barra na hora de digitar manualmente.
    • O agendamento dos jobs internos da empresa é informação sensível, então prefere uma ferramenta que roda inteiramente no navegador, sem enviar nada a um servidor externo.

    Como usar

    1. Para traduzir uma expressão: digite ou cole uma string cron de 5 campos (ou uma abreviação com @ como `@daily`) no campo de entrada.
    2. Leia a descrição em português claro e os próximos 5 horários de execução calculados abaixo dela — ambos são atualizados em tempo real enquanto você digita.
    3. Para montar uma em vez disso: abra a seção Construtor, escolha um modo (todo / a cada N / valor específico) para cada um dos cinco campos e clique em "Gerar expressão."
    4. A expressão gerada preenche o campo de entrada acima e alimenta imediatamente os painéis de descrição e próximos horários.
    5. Use a legenda de sintaxe na parte inferior como referência rápida para `*`, `,`, `-` e `/`.
    6. Copie a expressão final com o botão Copiar e cole no seu crontab, config de CI ou agendador.

    Exemplo

    Entrada

    */15 9-17 * * MON-FRI

    Resultado

    Às 09:00, 09:15, 09:30, 09:45, 10:00 ... 17:45, na segunda, terça, quarta, quinta e sexta-feira

    Esta expressão é executada a cada 15 minutos, mas apenas dentro do intervalo das 09:00 às 17:59, e apenas em dias úteis — um agendamento típico de verificação em "horário comercial".

    Cron padrão vs. Quartz cron

    "Sintaxe cron" não é um único padrão universal — os dois formatos que você mais vai encontrar diferem no número de campos e no significado de alguns caracteres especiais. Use esta tabela para confirmar que está usando o formato correto para o seu agendador de destino.

    AspectoCron padrão (esta ferramenta)Quartz cron
    Número de campos5 (minuto hora dom mês dow)6 ou 7 (adiciona segundos, e ano opcional)
    Usado porcrontab do Linux/macOS, Kubernetes CronJob, GitHub ActionsQuartz Scheduler do Java, alguns agendadores empresariais
    Dia-do-mês + dia-da-semana ambos definidosCorresponde a QUALQUER um (união/OU)Requer `?` em um dos dois campos — não é possível definir ambos com um valor simultaneamente
    Caracteres especiais extrasNenhum além de `* , - /`Adiciona `?`, `L` (último), `W` (dia útil mais próximo), `#` (n-ésimo dia da semana do mês)
    Agendamento em nível de segundosNão suportadoSuportado (primeiro campo)

    Ferramentas relacionadas

    Trabalhando com configs, agendamentos ou timestamps? Estas ferramentas combinam bem com o gerador de cron.

    Conversor de Timestamp · Conversor de Fuso Horário Mundial · Calculadora de Datas

    Armadilhas comuns de fuso horário em produção

    Uma expressão cron pode estar tecnicamente correta e ainda assim rodar num horário totalmente diferente do esperado em produção. É especialmente comum entre equipes no Brasil e em Portugal usar servidores em nuvem ou containers Docker configurados por padrão em UTC, sem perceber — o resultado é um job que deveria rodar de madrugada acabando disparado em plena tarde local. Confirmar sempre os "próximos horários de execução" ao gerar ou validar uma expressão ajuda a pegar esse tipo de erro antes que ele afete o ambiente de produção.

    • Confira o fuso horário do servidor ou container com um comando como `date` antes de fazer o deploy do agendamento.
    • Lembre-se que o cron do GitHub Actions e da maioria dos runners de CI é avaliado em UTC — sempre converta a partir do horário local antes de publicar.
    • Não esqueça que definir dia do mês E dia da semana ao mesmo tempo faz o cron tratar como "OU", não "E" — confira os próximos horários para garantir que o job não vai rodar em dias extras sem querer.
    • Em servidores de regiões com horário de verão, o agendamento pode escorregar uma hora duas vezes por ano — trabalhar com UTC internamente e converter na aplicação evita essa armadilha.

    Perguntas frequentes

    O que é uma expressão cron?

    Uma expressão cron é uma string de texto de 5 campos (`minuto hora dia-do-mês mês dia-da-semana`) que especifica um agendamento recorrente para o daemon `cron` do Unix e agendadores compatíveis. Cada campo pode ser `*` (qualquer valor), um número, uma lista separada por vírgulas, um intervalo (`a-b`) ou um passo (`*/n`); os campos de mês e dia da semana também aceitam nomes de três letras como `JAN` ou `MON`. A especificação completa está documentada na página de manual crontab(5).

    O que acontece quando tanto o dia-do-mês quanto o dia-da-semana estão restritos?

    Esta é uma pegadinha bem conhecida do cron: pela semântica POSIX cron, quando AMBOS os campos dia-do-mês e dia-da-semana estão restritos (não são `*`), uma tarefa é executada se QUALQUER uma das condições for atendida — é uma união (OU), não uma interseção (E). Por exemplo, `0 4 8 * MON` executa às 4h tanto no dia 8 de todo mês QUANTO em toda segunda-feira, não apenas nas segundas que caem no dia 8. Esta ferramenta implementa exatamente esse comportamento de união ao calcular os próximos horários de execução.

    Cron padrão vs. Quartz cron — qual eu preciso?

    Esta ferramenta gera sintaxe cron POSIX/Vixie padrão de 5 campos — o formato usado pelo `crontab` do Linux/macOS, Kubernetes CronJobs, `schedule:` do GitHub Actions e pela maioria dos executores de tarefas derivados do Unix. O Quartz cron, usado pelo Quartz Scheduler do Java e por ferramentas construídas sobre ele (alguns agendadores empresariais, configurações antigas do Spring Batch), é um formato diferente de 6 ou 7 campos que adiciona um campo de segundos no início e muda o significado de alguns caracteres especiais (`?` para "nenhum valor específico" nos campos de dia, `L`/`W`/`#` para "último dia," "dia útil mais próximo," e "n-ésimo dia da semana do mês"). Se o número de campos do seu agendador for 6 ou 7, ou sua documentação mencionar `?`, `L`, `W` ou `#`, você precisa de uma ferramenta específica para Quartz — expressões deste gerador não serão interpretadas corretamente lá. Se forem exatamente 5 campos (ou uma abreviação estilo `@daily`), você está no lugar certo.

    O que significam os atalhos @yearly, @monthly, @weekly, @daily e @hourly?

    Estas são strings abreviadas não padronizadas, mas amplamente suportadas, que se expandem para expressões comuns de 5 campos: `@yearly`/`@annually` = `0 0 1 1 *` (uma vez por ano, 1º de janeiro à meia-noite), `@monthly` = `0 0 1 * *` (dia 1 de todo mês à meia-noite), `@weekly` = `0 0 * * 0` (todo domingo à meia-noite), `@daily`/`@midnight` = `0 0 * * *` (todo dia à meia-noite), `@hourly` = `0 * * * *` (no início de cada hora). Esta ferramenta interpreta todas elas e as trata exatamente como seu equivalente expandido de 5 campos.

    Posso usar nomes de dias/meses em vez de números?

    Sim. O campo de mês aceita nomes de três letras de `JAN` a `DEC`, e o campo de dia da semana aceita `SUN` a `SAT` (sem diferenciar maiúsculas/minúsculas), de forma intercambiável com números. Os números de dia da semana vão de 0 a 6, com 0 = domingo; algumas implementações também aceitam 7 para domingo, que esta ferramenta normaliza para 0. Intervalos e listas também funcionam com nomes, por exemplo `MON-FRI` ou `JAN,JUN,DEC`.

    Minha expressão cron é enviada para um servidor?

    Não. A análise, a descrição em português claro e o cálculo do próximo horário de execução acontecem todos localmente em JavaScript no seu navegador. Nada do que você digita ou gera sai do seu dispositivo.

    Em qual fuso horário os próximos horários de execução são calculados?

    A ferramenta calcula os próximos horários com base no fuso horário local que o seu navegador está configurado para usar. Se o daemon cron real ou o runner de CI/CD estiver rodando em outro fuso (como UTC), os horários exibidos aqui podem não bater com a execução real — vale a pena confirmar o fuso configurado no agendador de produção.

    Posso colar a expressão gerada direto no YAML do GitHub Actions?

    Sim, a expressão de 5 campos gerada é compatível com a sintaxe esperada pelo campo `schedule:` do GitHub Actions. Só fique atento que o cron do GitHub Actions sempre é avaliado em UTC — se você quer que o job rode num horário específico no fuso do Brasil, precisa calcular a diferença (geralmente -3h) antes de gerar a expressão.

    Dá para agendar "todo último dia do mês" com essa sintaxe?

    Não diretamente. O cron padrão de 5 campos que esta ferramenta gera não tem um caractere especial para "último dia" (isso é um recurso do Quartz cron, com o `L`). Para lidar com o fim do mês em cron padrão, uma solução comum é agendar para os dias `28-31` e fazer o próprio script verificar se aquele é realmente o último dia do mês antes de executar a lógica principal.

    Por que meu job noturno às vezes roda uma hora adiantado ou atrasado?

    Provavelmente o fuso horário configurado no servidor ou container é diferente do que você testou durante o desenvolvimento. Em servidores localizados em regiões que adotam horário de verão, o agendamento pode deslocar em até uma hora duas vezes por ano — por isso é mais seguro montar a expressão em UTC e fazer a conversão para o horário local dentro da própria aplicação.

    Ferramentas relacionadas