Construtor de expressões Cron
ConversãoMonta, valida e explica expressões cron. Calcula o próximo disparo (UTC).
- Próxima execução (UTC)
- —
- Copiar
- —
Nesta página
O que é uma expressão cron?#
Uma expressão cron é um agendamento compacto escrito como cinco campos separados por espaços: minuto hora dia-do-mês mês dia-da-semana. Uma linha como 0 9 * * 1-5 lê-se da esquerda para a direita como “no minuto 0, hora 9, todos os dias-do-mês, todos os meses, nos dias 1 a 5 (segunda a sexta)” — ou seja, 09:00 nos dias úteis. Cada * significa “todos os valores deste campo”, pelo que quanto mais campos fixar, mais específico é o agendamento; quanto mais deixar como *, mais vezes dispara.
Cron é a linguagem nativa de agendamento do crontab do Linux, do GitHub Actions, do CronJob do Kubernetes, da maioria dos sistemas de CI e de inúmeros agendadores de tarefas. Escrever uma corretamente é metade do trabalho; a outra metade é a particularidade dia-do-mês / dia-da-semana (ver FAQ abaixo) que tropeça até engenheiros experientes. Esta página analisa os seus cinco campos à medida que escreve, sinaliza o campo exato que tem um erro de sintaxe ou intervalo e calcula a próxima execução para que possa confirmar que o agendamento realmente dispara quando pensa que dispara.
Como usar#
- Edite o campo Expressão no topo. Arranca com
* * * * *(todos os minutos). - Por baixo ficam cinco listas pendentes — uma por campo (minuto, hora, dia-do-mês, mês, dia-da-semana). Cada uma oferece os fragmentos comuns desse campo (
*,*/5,0,1-5,0,6…); escolher um larga-o na posição correspondente da expressão, o que é útil quando não se lembra se*/15vai no campo dos minutos. - A linha de modelos preenche agendamentos iniciais completos num clique: todos os minutos, de hora em hora, diariamente, semanalmente, mensalmente, anualmente, dias úteis.
- O painel de saída mostra próxima execução (o primeiro instante igual ou posterior ao momento atual que corresponde) e uma linha de estado que ou confirma uma análise válida ou indica o campo problemático. Carregue em now() para recalcular face ao momento atual.
Principais recursos#
- Gramática completa de cinco campos. Suporta
*, listas separadas por vírgula (0,15,30,45), intervalos (1-5), passos (*/15,9-17/2) e nomes de mês/dia (JAN-DEC,SUN-SAT, sem distinção de maiúsculas).7é aceite para domingo e normalizado para0. - Lógica correta de dia-do-mês/dia-da-semana. Implementa a regra padrão do Vixie-cron: quando ambos os campos estão restritos, a tarefa dispara se qualquer deles corresponder (OU lógico); quando apenas um está restrito, ambos têm de corresponder (E). Muitas calculadoras ingénuas erram aqui.
- Erros precisos por campo. Um intervalo inválido ou uma letra perdida é reportado com o campo exato em falta (
minute,hour…), não uma mensagem genérica de “expressão inválida”. - Próxima execução em UTC. O próximo disparo é calculado sobre os componentes UTC do instante, pelo que o resultado é determinístico independentemente de onde a página é carregada, depois renderizado como uma data normal que pode copiar.
- Proteção contra inalcancabilidade. Uma expressão que nunca pode corresponder (por exemplo, um dia-do-mês que nenhum mês contém) é detetada em vez de entrar em ciclo para sempre.
Exemplo detalhado#
Escreva 0 9 * * 1-5 para uma reunião diária de dias úteis. Campo a campo: minuto 0, hora 9, dia-do-mês *, mês *, dia-da-semana 1-5. Tanto o campo de data (*) como o de dia-da-semana (1-5) estão restritos, mas apenas o dia-da-semana o está — a data é um universal — pelo que se aplica o caminho E: disparar às 09:00 nos dias de segunda a sexta. A próxima execução mostra o próximo instante de um dia útil a 09:00 UTC.
Compare agora com 0 0 1 * 1 — “minuto 0, hora 0, dia 1 do mês, todos os meses, segunda-feira”. Aqui tanto o dia-do-mês (1) como o dia-da-semana (1) estão restritos, pelo que o cron segue o caminho OU: a tarefa dispara no dia 1 de cada mês e em todas as segundas-feiras — não “segundas que calham no dia 1”, que é a leitura errada quase universal. O painel próxima execução torna a diferença visível: verá o instante avançar para a segunda-feira mais próxima mesmo quando essa segunda não é dia 1.
Perguntas frequentes#
Porque é que a minha tarefa dispara em dias em que não contava?#
Quase sempre pela interação dia-do-mês/dia-da-semana. O cron padrão trata-os como um OU quando ambos estão fixos: 0 0 1 * 1 significa “dia 1 ou qualquer segunda-feira”, não “o dia 1 apenas se for segunda”. Se quer uma tarefa que só dispare quando o dia 1 é uma segunda, o próprio cron não consegue expressar isso — agende o dia 1 e adicione uma verificação de dia-da-semana dentro do script.
O que significam */5 e 9-17/2?#
*/5 no campo dos minutos significa “a começar em 0, cada 5.º valor” → 0, 5, 10, 15, …, 55. 9-17/2 significa “dentro do intervalo de 9 a 17, cada 2.º valor” → 9, 11, 13, 15, 17 — útil para “a cada duas horas durante o horário de trabalho”. O divisor do passo após / aplica-se a qualquer intervalo ou universal que o preceda.
Domingo é 0 ou 7?#
Ambos. O campo dia-da-semana aceita 0 e 7 para domingo (o cron usou historicamente 0; alguns sistemas juntaram 7). Esta ferramenta aceita qualquer um e normaliza 7 para 0. Nomes também funcionam: SUN, Mon, fri são todos aceites sem distinção de maiúsculas.
A expressão analisa mas a próxima execução parece longínqua. Estará errada?#
Provavelmente não — normalmente significa que o agendamento genuinamente não consegue disparar em breve. 0 0 29 2 * (29 de fevereiro) é válido mas só corresponde em anos bissextos, pelo que a próxima execução pode estar a anos de distância. A ferramenta limita a procura a aproximadamente oito anos; uma expressão que não consiga corresponder dentro dessa janela é reportada como inalcançável em vez de pendurar a página.