Gerador de expressões Cron

Construa e entenda os agendamentos de tarefas cron de forma visual.

Predefinições rápidas

* * * * *

5 próximas execuções

Referência de sintaxe cron

* · qualquer valor

*/5 · a cada 5 unidades

1,15 · nos valores 1 e 15

1-5 · faixa de 1 a 5

Campos : minuto (0-59), hora (0-23), dia do mês (1-31), mês (1-12), dia da semana (0-6, 0=domingo)

Uma breve história da expressão cron

A expressão cron de cinco campos data de maio de 1975, quando uma versão inicial foi enviada dos AT&T Bell Laboratories como parte do Research Unix Versão 7. O nome alude a Chronos, a personificação grega do tempo. O formato era simples: cinco campos separados por espaços em branco (minuto, hora, dia-do-mês, mês, dia-da-semana) em uma linha em /usr/lib/crontab. A reescrita Vixie cron por Paul Vixie em 1987 tornou-se a implementação moderna de fato; toda grande distribuição Linux envia um cron derivado de Vixie, e Vixie adicionou o crontab por usuário, o suporte a variáveis de ambiente (MAILTO=, CRON_TZ=), e as macros de atalho @hourly / @daily / @reboot que todo mundo usa hoje. A sintaxe da expressão cron então bifurcou em dois caminhos. O Quartz Scheduler (Java, James House, 1998; doado para Apache e Terracotta) adicionou um campo segundos no início, um campo ano opcional no final, e os operadores L (último) / W (dia útil) / # (n-ésima ocorrência), produzindo o cron de seis campos que AWS EventBridge (originalmente CloudWatch Events, 2014) e a anotação @Scheduled do Spring adotaram depois. O formato NCronTab usado pelas Azure Functions (2016) colocou os segundos primeiro mas manteve cinco campos comportamentais. A era da nuvem então padronizou o formato Vixie de cinco campos como lingua franca: os Kubernetes CronJobs (alpha 1.4 em 2016, GA em 1.21 em 2021) aceitam exatamente cinco campos, assim como o GitHub Actions (on.schedule.cron, 2019), GCP Cloud Scheduler (2018), e Vercel Cron Jobs (2022). Os construtores visuais de cron, a categoria a que esta ferramenta pertence, emergiram por volta de 2010-2015: crontab.guru (Christine Dodrill, 2014) tornou-se a referência mais citada, e a biblioteca cron-descriptor (Brady Holt, originalmente .NET, portada para Java/Python/JS) alimentou a maioria das camadas de tradução de «cron em inglês simples» em que decodificadores e geradores se baseiam. Meio século depois de Bell Labs, os mesmos cinco campos ainda agendam os backups noturnos do mundo.

A anatomia de uma expressão cron

Onde a expressão se aplica

Padrões, dialetos e marcos

Perguntas frequentes adicionais

Cinco campos são o mesmo que seis ou sete?

Não. A forma POSIX clássica é de cinco campos (minuto, hora, dia-do-mês, mês, dia-da-semana). Quartz e Spring usam seis campos ao adicionar uma coluna de segundos no início, e Quartz aceita um sétimo campo de ano opcional. AWS EventBridge sempre usa seis campos terminando em ano (cron(min hr dom mon dow yr)). Colar uma expressão de cinco campos no Quartz ou Spring levanta um erro de sintaxe; colar uma expressão de seis campos no Linux interpreta silenciosamente os campos errados.

Qual é o menor intervalo que cron pode expressar?

Cada minuto (* * * * *) em cron Unix padrão. Não há campo de segundos integrado. Agendadores como Quartz ou NCronTab adicionam um se você precisa de cadência sub-minuto, e os timers do systemd podem usar OnUnitActiveSec=30s. GitHub Actions limita a cadência mais curta a 5 minutos, e EventBridge dispara dentro de uma janela de 60 segundos do tempo agendado, então não confie em cron para precisão de tempo real rígida.

Como executo uma tarefa no último dia do mês?

O cron padrão de cinco campos não tem operador nativo «último dia do mês». Quartz e AWS EventBridge suportam L no campo dia-do-mês: 0 0 L * ? dispara à meia-noite no último dia. Em cron Linux puro, a solução habitual é agendar diariamente em dias candidatos e filtrar o comando: 0 0 28-31 * * [ "$(date +\%d -d tomorrow)" = "01" ] && /path/to/script. Os timers do systemd expressam isso diretamente com OnCalendar=*-*-* 00:00:00.

Por que minha tarefa cron não rodou quando eu esperava?

Os suspeitos habituais, em ordem: (1) o servidor está em uma zona horária diferente da que você assume (verifique com date); (2) PATH não é o que seu shell interativo tem, então um comando funciona no prompt mas falha sob cron (use caminhos absolutos); (3) a saída foi para email e você perdeu (defina MAILTO="" ou redirecione para um arquivo de log); (4) o daemon cron não está rodando (systemctl status cron); (5) a armadilha OR (veja acima) está disparando em dias extras que você não pretendia.

Qual é a diferença entre cron, anacron, e os timers do systemd?

Cron espera que o sistema esteja rodando no tempo agendado e silenciosamente pula tarefas que caem durante tempo de inatividade: bom para servidores sempre ligados, ruim para laptops. Anacron rastreia carimbos de tempo de última execução por tarefa e recupera tarefas perdidas após uma reinicialização, ao custo de precisão de nível de dia em vez de minuto. Os timers do systemd substituem cron na maioria das distribuições Linux modernas: eles suportam tanto agendamentos de calendário quanto monotônicos, registram em journald, podem declarar dependências de serviço, e usam Persistent=true para combinar precisão estilo cron com recuperação estilo anacron.

Como zonas horárias e horário de verão afetam cron?

A maioria dos daemons cron interpreta agendamentos na zona horária do sistema. Em servidores em nuvem isso geralmente significa UTC, então 0 9 * * * dispara às 9h UTC, não às 9h locais. Defina CRON_TZ=America/New_York em um crontab Linux; Kubernetes usa spec.timeZone; AWS, GCP, e Vercel cada um recebem uma zona IANA explícita. Durante a passagem para horário de verão, tarefas agendadas na hora pulada são executadas imediatamente depois pelo Vixie cron mas puladas completamente pelo AWS EventBridge. O padrão mais seguro é deixar cron em UTC e converter dentro da tarefa.

Ferramentas relacionadas