Construir uma expressão cron
- Painel
- Documentação
- API
Porquê um cron builder visual?
Uma expressão cron cabe em cinco campos e continua a ser uma das maiores fontes de
bugs em produção. Quantas vezes um programador escreveu 0 0 * * 1 a pensar "todas as
segundas-feiras", sem se lembrar que 1 pode significar domingo conforme a implementação? Quantas
vezes se confundiu */15 com 15? O cron builder responde a esta
necessidade: compor visualmente uma expressão crontab, a partir de predefinições comuns ou
de campos individuais, e obter a expressão final pronta a colar num crontab Linux, um Kubernetes
CronJob ou um schedule do GitHub Actions.
A ferramenta é o inverso do nosso cron decoder: enquanto o conversor recebe uma expressão e enumera as próximas execuções, o builder recebe escolhas humanas e produz a expressão cron correspondente.
Como funciona
A interface gráfica oferece dois modos de composição complementares:
- Modo predefinição: um seletor de frequência (every minute, every hour, every day, every week, every month, every year, custom) que gera imediatamente uma expressão cron válida.
- Modo campos: cinco campos editáveis (minuto, hora, dia do mês, mês, dia da
semana) onde introduz livremente
*, um inteiro, um intervalo1-5, uma lista1,15,30ou um passo*/15.
O builder atualiza a expressão em tempo real e mostra uma leitura humana sucinta ("todos os dias às 3h", "a cada 15 minutos") que serve de garde-fou: se a frase não corresponder à sua intenção, a expressão está provavelmente errada.
Os cinco campos cron, em claro
Uma expressão cron padrão contém cinco campos separados por espaços:
minute heure jour-du-mois mois jour-de-la-semaine
* * * * *
- minuto (0 a 59);
- hora (0 a 23);
- dia do mês (1 a 31);
- mês (1 a 12 ou abreviaturas Jan, Feb, etc.);
- dia da semana (0 a 7, 0 e 7 representam ambos domingo na maioria das implementações).
Cada campo aceita várias formas: * (todos os valores), um inteiro preciso
(5), uma lista (1,3,5), um intervalo (9-17), um passo (*/15
a cada 15 valores), ou uma combinação (0-30/5).
Casos de uso típicos
- Programador que aprende cron: visualizar como cada campo interage, sem arriscar uma expressão errada em produção.
- Sysadmin com pressa: gerar em poucos segundos um schedule para um cron Linux, um Kubernetes CronJob ou um job Ansible sem reler a man page.
- Programador sem experiência POSIX: produzir uma expressão crontab válida para Symfony Scheduler, Laravel Scheduler ou node-cron sem conhecer a sintaxe histórica.
- DevOps em revisão: prototipar rapidamente uma expressão a propor numa pull request, depois validá-la com o cron decoder.
- Migração legacy: reformular uma expressão cron histórica passando pelo builder para garantir a semântica antes de a empurrar para outro sítio.
Predefinições comuns
Selecionar uma predefinição substitui os campos individuais e produz a expressão correspondente:
- A cada minuto:
* * * * *. A evitar em produção salvo necessidade específica. - A cada hora:
0 * * * *. No início de cada hora. - Todos os dias:
0 0 * * *. À meia-noite. - Todas as semanas:
0 0 * * 0. Todos os domingos à meia-noite. - Todos os meses:
0 0 1 * *. No dia 1 do mês à meia-noite. - Todos os anos:
0 0 1 1 *. No 1 de janeiro à meia-noite.
Padrões comuns a conhecer
| Expressão | Leitura humana |
|---|---|
0 0 * * * |
Todos os dias à meia-noite |
*/15 * * * * |
A cada 15 minutos |
0 9 * * 1-5 |
Todos os dias úteis às 9h |
0 0 1 * * |
No dia 1 do mês à meia-noite |
0 0 * * 0 |
Todos os domingos à meia-noite |
*/5 9-17 * * 1-5 |
A cada 5 minutos em horário laboral |
0 3 * * * |
Todos os dias às 3h da manhã |
30 2 1,15 * * |
No dia 1 e no dia 15 do mês às 2h30 |
Compor uma expressão personalizada
Para casos mais específicos, o assistente expõe os cinco campos em entrada livre. Alguns exemplos úteis:
- Todos os dias às 3h da manhã: minuto=
0, hora=3, outros campos*. - A cada 15 minutos: minuto=
*/15, outros campos*. - De segunda a sexta às 9h: minuto=
0, hora=9, dia-da-semana=1-5. - Todos os dias 1 e 15 do mês ao meio-dia: minuto=
0, hora=12, dia-do-mês=1,15. - A cada 5 minutos entre as 9h e as 17h: minuto=
*/5, hora=9-17.
Como utilizar o cron builder
- Escolha uma predefinição (every minute, every hour, every day, every week, every month, every year) que corresponda à base da sua necessidade.
- Afine se necessário editando diretamente os cinco campos (minuto, hora, dia do mês, mês, dia da semana).
- Leia a frase humana gerada pela ferramenta para confirmar a intenção.
- Copie a expressão cron produzida com o botão de cópia.
- Valide o schedule com o nosso cron decoder que calcula as próximas datas de execução reais.
- Cole a expressão no seu crontab Linux, no seu Kubernetes CronJob, no seu Symfony Scheduler ou no seu workflow do GitHub Actions.
Armadilhas clássicas
- Dia do mês e dia da semana combinados: se nenhum dos dois for
*, o comportamento difere conforme as implementações. Linux/Vixie cron aplica um OU; as bibliotecas modernas têm por vezes um comportamento diferente. A evitar. - Dia 1 = segunda ou domingo?: depende do país e da convenção. A maioria dos cron Unix considera domingo=0 e sábado=6. Verifique o seu agendador.
- Fuso horário: um cron Unix utiliza por defeito o fuso do servidor. Os agendadores aplicacionais (Symfony Scheduler, Quartz) permitem frequentemente fixar um fuso dedicado.
- Minuto em falta:
* * * * *executa o job a cada minuto, o que raramente é o que se quer. Pense em fixar um disparador preciso (0) para tarefas horárias.
Leitura humana e saída
Além da expressão cron, a ferramenta oferece uma leitura humana sucinta ("todos os dias à meia-noite", "a cada 5 minutos"). É um garde-fou: se a frase não corresponder à sua intenção, a expressão está provavelmente errada. Para um caso complexo, utilize depois o nosso cron decoder para calcular as próximas datas de execução reais.
Perguntas frequentes
Posso editar manualmente a expressão depois de usar a interface?
Sim. O builder não é um modo exclusivo: os cinco campos continuam editáveis a qualquer momento. Pode partir de uma predefinição e ajustar um campo à mão para obter uma expressão crontab à medida. A leitura humana é recalculada imediatamente.
A ferramenta suporta o formato Quartz com 6 campos (com segundos)?
Não: o formato a 5 campos é o padrão Unix e a base comum à maioria dos agendadores
(Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler).
O Quartz (Java) aceita um campo adicional para os segundos e símbolos específicos
(?, L, W, #), mas esta necessidade é rara.
Como é gerido o fuso horário?
O builder produz uma expressão cron neutra: é o motor que executa o job que aplica o seu
fuso horário. Num crontab Linux, é a TZ do servidor. No GitHub Actions, é UTC. No
Kubernetes 1.27+, pode fixar spec.timeZone no manifest. Symfony Scheduler e
Quartz expõem um fuso dedicado por tarefa.
Como validar a minha expressão sem a executar em produção?
Utilize o nosso cron decoder. Calcula as N próximas execuções a partir do instante atual, sem arrancar nenhum job. É a melhor forma de confirmar que uma expressão cron dispara à hora prevista antes de a implantar.
Qual a relação com o Symfony Scheduler?
O Symfony Scheduler aceita expressões cron a 5 campos através de Schedule::cron('0 3 * * *', ...)
. A expressão produzida pelo builder pode portanto ser colada tal como está. Idem para Laravel
Scheduler (->cron('...')), node-cron, Hangfire e Airflow.
É necessário prefixar o comando no crontab do sistema?
Sim, em /etc/crontab é preciso um utilizador (0 3 * * * www-data /usr/bin/php
...), enquanto o crontab -e por utilizador omite-o. A própria expressão mantém-se
idêntica.
Exemplo de pedido
curl -X POST https://cdrn.fr/api/v1/tools/cron-builder/execute \
-H "Content-Type: application/json" \
-d '{"preset":"none","minute":"*","hour":"*","day_of_month":"*","month":"*","day_of_week":"*"}'
Esquema de entrada
| Campo | Tipo | Obrigatório | Predefinição |
|---|---|---|---|
preset |
choice (none, every_minute, hourly, daily, weekly, monthly, yearly) | – | none |
minute |
string | – | * |
hour |
string | – | * |
day_of_month |
string | – | * |
month |
string | – | * |
day_of_week |
string | – | * |
Pontos de acesso
GET https://cdrn.fr/api/v1/tools- lista todas as ferramentas disponíveisGET https://cdrn.fr/api/v1/tools/cron-builder- obtém o esquema desta ferramentaPOST https://cdrn.fr/api/v1/tools/cron-builder/execute- executa esta ferramenta com um payload JSON