Gerador e explicador de expressões cron
Monte uma expressão cron ou leia uma em português claro.
Sobre esta ferramenta
Escolha com que frequência uma tarefa deve rodar para montar uma expressão cron, ou digite uma para obter uma descrição em português claro, o detalhamento de cada campo e as próximas execuções no seu fuso horário. Suporta intervalos, listas, passos, nomes de meses e dias e atalhos como @daily.
Como usar
- Para ler uma expressão, cole-a no modo Explicar e veja-a em português claro.
- Para criar uma, mude para o modo Montar e escolha com que frequência a tarefa deve rodar.
- Confira os próximos horários de execução, mostrados no seu fuso horário.
- Copie a expressão para o seu crontab, a configuração de CI ou o agendador.
Perguntas
- O que significam os cinco campos?
- Em ordem: minuto (0–59), hora (0–23), dia do mês (1–31), mês (1–12) e dia da semana (0–6, domingo é 0 ou 7). Um * significa todos os valores.
- Como executo uma tarefa a cada 5 minutos?
- Use */5 * * * *. O /5 é um passo, que significa a cada quinto valor daquele campo, começando em 0.
- E se eu definir tanto o dia do mês quanto o dia da semana?
- No cron clássico, a tarefa roda quando qualquer um dos dois corresponde, não ambos. Então 0 9 1 * MON roda às 9:00 no dia 1º de todo mês e em toda segunda-feira.
- Qual fuso horário o cron usa?
- O fuso horário da máquina ou do serviço que o executa, que muitas vezes é UTC em servidores e em CI. As próximas execuções aqui aparecem no seu horário local, então converta se o seu servidor usa UTC.
- Como rodar um cron job a cada 30 segundos?
- O cron não consegue: sua menor unidade é um minuto. Uma solução comum são duas entradas, uma rodando o comando e outra rodando sleep 30 seguido do comando. Para qualquer coisa mais precisa ou mais frequente, use um timer do systemd ou um processo de longa duração com seu próprio loop.
- Como rodar um job no último dia do mês?
- O cron padrão não tem L. Agende o job para os dias 28-31, como 0 23 28-31 * *, e comece o comando com uma verificação de que amanhã é dia 1, por exemplo [ $(date -d tomorrow +\%d) = 01 ] && your-command, que exige o GNU date.
- O que significa @reboot no crontab?
- O @reboot roda o comando uma vez quando o daemon do cron inicia, geralmente logo depois que a máquina liga. Ele é suportado pelo cronie e pelo Vixie cron, mas não é um agendamento por horário, então esta ferramenta não consegue mostrar as próximas execuções e exibe um erro. Em máquinas com systemd, uma service unit costuma ser a melhor escolha.
Por que meu cron job não está rodando?
Primeiro confira se o cron enxerga o job. Rode crontab -l com o mesmo usuário e garanta que o arquivo termine com uma quebra de linha, porque algumas versões do cron ignoram uma última linha sem ela. Depois confira o agendamento: cole-o aqui e leia as próximas execuções. Uma surpresa comum é */45 no campo de minutos, que dispara em :00 e :45 a cada hora, e não a cada 45 minutos.
Se o agendamento está certo, o problema costuma ser o ambiente. O cron roda com um PATH mínimo e sem perfil de shell, então comandos que funcionam no seu terminal falham com “command not found”. Use caminhos absolutos, defina o PATH no topo do crontab e mande a saída para um log com >> /tmp/job.log 2>&1 para ver os erros. Note também que % é especial nas linhas do crontab e precisa ser escapado como \%.
Sintaxe do cron explicada: intervalos, listas, passos e atalhos
Cada campo aceita mais do que um único número. Um intervalo como 9-17 corresponde a todos os valores de 9 a 17, uma lista como 1,15 corresponde a cada valor listado, e um passo como */15 corresponde a cada décimo quinto valor, a partir do mínimo do campo. Eles se combinam: 0-30/10 no campo de minutos significa 0, 10, 20 e 30. Os campos de mês e de dia da semana também aceitam nomes como JAN ou MON-FRI.
Os atalhos substituem uma expressão inteira: @hourly é 0 * * * *, @daily e @midnight são 0 0 * * *, @weekly é 0 0 * * 0, @monthly é 0 0 1 * *, e @yearly ou @annually é 0 0 1 1 *. No campo de dia da semana, tanto 0 quanto 7 significam domingo. A tabela Campos deste explicador de expressões cron mostra em quais valores cada campo se expande, o jeito mais rápido de conferir uma combinação complicada.
Crontab, Kubernetes, GitHub Actions e cron do Quartz
O formato de cinco campos é compartilhado pelo crontab do Linux, pelos CronJobs do Kubernetes e pelos agendamentos do GitHub Actions, então uma expressão montada com este gerador cron funciona nos três. O GitHub Actions sempre usa UTC, roda no máximo a cada 5 minutos e pode iniciar jobs agendados com atraso quando está sobrecarregado. O Kubernetes usa o fuso horário do controller, a menos que você defina spec.timeZone. Nenhum deles aceita um campo de segundos.
Quartz, Spring e AWS EventBridge usam formatos mais longos. Quartz e Spring adicionam um campo de segundos no início, e a AWS adiciona um campo de ano no fim. Quartz e AWS também exigem ? em um dos dois campos de dia, e os três aceitam extras como L para o último dia e # para o enésimo dia da semana. Essas expressões são rejeitadas aqui, então remova os campos extras e reescreva L ou # à mão.
Expressões cron comuns
Copie um destes agendamentos ou cole-o na ferramenta acima para ver as próximas execuções.
| Expressão | Significado |
|---|---|
* * * * * | A cada minuto |
*/5 * * * * | A cada 5 minutos |
*/15 * * * * | A cada 15 minutos |
0 * * * * | A cada hora |
0 */6 * * * | Na hora certa, a cada 6 horas |
0 0 * * * | Às 00:00 |
30 2 * * * | Às 02:30 |
0 9 * * 1-5 | Às 09:00, de segunda-feira a sexta-feira |
0 0 * * 0 | Às 00:00, somente de domingo |
0 0 1 * * | Às 00:00, no dia 1 do mês |
0 0 1 1 * | Às 00:00, no dia 1 do mês, somente em janeiro |
Algo não está funcionando ou um resultado parece errado? Relatar um problema com esta ferramenta