Skip to content

Referência conferida no crontab(5) e na documentação de cada plataforma

Exemplos de expressões cron

Uma expressão cron tem cinco campos separados por espaço: minuto, hora, dia do mês, mês e dia da semana. */5 * * * * roda a cada 5 minutos, 0 0 * * * todo dia à meia-noite, e 0 9 * * 1-5 às 09:00 em dias úteis.

Cada página abaixo explica um agendamento campo a campo, mostra as próximas execuções no seu fuso e em UTC, e traz o mesmo agendamento para crontab, GitHub Actions, Kubernetes, Vercel, Cloudflare Workers, node-cron, systemd e Spring/Quartz, com as armadilhas específicas de cada caso.

Todos os agendamentos

Segundos e minutos

Segundos e minutos
AgendamentoExpressãoRoda
Cron a cada 30 segundos*/30 * * * * *Duas vezes por minuto (impossível no cron de 5 campos)
Cron a cada minuto* * * * *No início de cada minuto
Cron a cada 5 minutos*/5 * * * *Nos minutos 0, 5, 10, …, 55 de toda hora
Cron a cada 10 minutos*/10 * * * *Nos minutos 0, 10, 20, 30, 40 e 50
Cron a cada 15 minutos*/15 * * * *Em :00, :15, :30 e :45 de toda hora
Cron a cada 30 minutos*/30 * * * *Nos minutos 0 e 30 de toda hora

Horas

Horas
AgendamentoExpressãoRoda
Cron a cada hora0 * * * *No minuto 0 de toda hora
Cron a cada 2 horas0 */2 * * *No minuto 0 de toda hora par
Cron a cada 6 horas0 */6 * * *Às 00:00, 06:00, 12:00 e 18:00
Cron a cada 12 horas0 */12 * * *Às 00:00 e às 12:00
Cron duas vezes por dia0 9,21 * * *Às 09:00 e às 21:00

Dias

Dias
AgendamentoExpressãoRoda
Cron todo dia à meia-noite0 0 * * *Uma vez por dia, às 00:00
Cron todo dia ao meio-dia0 12 * * *Uma vez por dia, às 12:00
Cron todo dia às 9h0 9 * * *Uma vez por dia, às 09:00
Cron a cada 3 dias0 0 */3 * *Dias 1, 4, 7, …, 31 de cada mês, às 00:00

Dias da semana e semanas

Dias da semana e semanas
AgendamentoExpressãoRoda
Cron todo dia útil0 0 * * 1-5Às 00:00, de segunda a sexta
Cron todo dia útil às 9h0 9 * * 1-5Às 09:00, de segunda a sexta
Cron todo fim de semana0 0 * * 0,6Às 00:00 de sábado e de domingo
Cron toda segunda-feira0 0 * * 1Às 00:00 de toda segunda-feira
Cron todo domingo0 0 * * 0Às 00:00 de todo domingo
Cron toda semana0 0 * * 0Uma vez por semana, domingo às 00:00

Meses, trimestres e anos

Meses, trimestres e anos
AgendamentoExpressãoRoda
Cron todo mês0 0 1 * *Uma vez por mês, dia 1 às 00:00
Cron no primeiro dia do mês0 0 1 * *Dia 1 de todo mês às 00:00
Cron no último dia do mês0 0 L * *Último dia de cada mês (exige L ou teste de data)
Cron todo trimestre0 0 1 1,4,7,10 *1º de jan, abr, jul e out às 00:00
Cron todo ano0 0 1 1 *Uma vez por ano, 1º de janeiro às 00:00

Especiais

Especiais
AgendamentoExpressãoRoda
Cron @reboot: rodar uma tarefa na inicialização@rebootUma vez quando o daemon do cron inicia após o boot

Guia rápido da sintaxe do cron

Os cinco campos

Os cinco campos
#CampoValores aceitosNomes
1Minuto0-59
2Hora0-23
3Dia do mês1-31
4Mês1-12JAN-DEC
5Dia da semana0-6, domingo = 0 (7 também é domingo no cronie, Debian, node-cron, Spring)SUN-SAT

Caracteres especiais

Caracteres especiais
CaractereSignificadoExemplo
*Todos os valores do campo* * * * * a cada minuto
,Lista de valores0 9,17 * * * às 09:00 e às 17:00
-Faixa inclusiva0 9 * * 1-5 de segunda a sexta
/Passo, dentro do campo*/15 * * * * minutos 0, 15, 30, 45
a-b/nPasso dentro de uma faixa0 1-23/2 * * * horas ímpares

L (último), W (dia útil mais próximo), # (enésimo dia da semana) e ? (sem valor) são extensões do Quartz. Spring, node-cron e Cloudflare aceitam a maioria; crontab, GitHub Actions, Kubernetes e Vercel não.

Macros

Macros
MacroEquivale aRoda
@yearly, @annually0 0 1 1 *1º de janeiro às 00:00
@monthly0 0 1 * *Dia 1 de cada mês às 00:00
@weekly0 0 * * 0Domingo às 00:00
@daily, @midnight0 0 * * *Todo dia às 00:00
@hourly0 * * * *Minuto 0 de toda hora
@reboot(sem horário)Uma vez quando o daemon do cron inicia

Como o cron decide quando rodar

Ele verifica a cada minuto

O daemon acorda uma vez por minuto e dispara toda tarefa cujos campos de minuto, hora e mês batem com o horário atual e cujos campos de dia batem com hoje. Ele não guarda histórico: um minuto perdido está perdido, e é por isso que existem o anacron e o Persistent=true do systemd.

Passos recomeçam em cada campo

Um passo como */7 só se repete dentro do próprio campo. Os minutos vão 0, 7, …, 56 e voltam ao 0, então o intervalo na virada da hora é de 4 minutos. O mesmo vale para horas (*/5) e dias (*/3 recomeça no dia 1). Só passos que dividem o campo por igual dão um intervalo constante.

Dia do mês OU dia da semana

Pelo crontab(5), se os dois campos de dia estão restritos, a tarefa roda quando qualquer um bate. 30 4 1,15 * 5 roda no dia 1, no dia 15 e em toda sexta. Um campo que começa com * conta como irrestrito no cronie, até */2. node-cron e systemd usam E, a Vercel recusa os dois juntos e o Quartz obriga um ? em um deles.

Fuso horário e horário de verão

O crontab segue o fuso do servidor; o cronie também lê CRON_TZ. Agendadores hospedados usam UTC na maioria. O Brasil não tem horário de verão desde 2019, mas em fusos que têm, tarefas entre 01:00 e 03:00 no horário local são as que acabam puladas ou repetidas; evite essa janela ou agende em UTC.

Diferenças entre plataformas

Os mesmos cinco campos se comportam de forma um pouco diferente dependendo de onde rodam. Conferido na documentação de cada fornecedor na data de revisão abaixo.

Diferenças entre plataformas
PlataformaFuso horárioMenor intervaloSegundosDias da semana e extensões
crontab (cronie, Debian)Do servidor, ou CRON_TZ (cronie)1 minutoNão0-7, nomes; macros; sem L
GitHub ActionsUTC, ou timezone5 minutos, pode atrasarNão0-6, nomes; sem macros
Kubernetes CronJobspec.timeZone, senão o do controlador1 minutoNão0-6, nomes; macros; ? = *
VercelSó UTC1 minuto (Pro), 1 dia (Hobby)Não0-6; sem nomes; não aceita os dois campos de dia
Cloudflare WorkersSó UTC1 minutoNão1 = domingo … 7 = sábado; L, W, #
node-cron 4.xDo processo, ou opção timezone1 segundo1º campo opcional0-7, nomes; L, W, #; campos de dia com E
Timer do systemdDo sistema, ou fuso no fimMenos de 1 segundo (ajuste AccuracySec)SimSintaxe própria: Mon..Fri *-*-* 09:00
Spring @ScheduledDa JVM, ou zone1 segundo1º campo obrigatório0-7, nomes; L, W, #; macros
QuartzDa JVM, ou do trigger1 segundo1º campo obrigatório1 = domingo … 7 = sábado; ? obrigatório

Ferramentas

Para montar uma expressão escolhendo opções, ou colar uma e ler em linguagem comum:

Perguntas frequentes

Quais são os cinco campos de uma expressão cron?
Minuto (0-59), hora (0-23), dia do mês (1-31), mês (1-12) e dia da semana (0-6, domingo = 0, e 7 também é domingo na maioria dos crons). Uma linha do crontab acrescenta o comando depois deles.
Qual fuso horário o cron usa?
O crontab usa o fuso local do servidor (o cronie também lê CRON_TZ). O GitHub Actions usa UTC a menos que você defina timezone, o Kubernetes usa spec.timeZone ou o fuso do controlador, e Vercel e Cloudflare sempre usam UTC.
O que acontece quando dia do mês e dia da semana estão preenchidos?
No cron padrão a tarefa roda quando qualquer um deles bate: 0 0 1 * 1 roda no dia 1 e em toda segunda. node-cron e systemd usam E, a Vercel proíbe preencher os dois e o Quartz exige ? em um deles.
O cron roda tarefas a cada poucos segundos?
Não. O cron de cinco campos tem resolução de um minuto. Use duas linhas com sleep, um timer do systemd ou um agendador de 6 campos como node-cron ou Spring para intervalos menores que um minuto.
Como conferir uma expressão cron antes do deploy?
Olhe as próximas execuções. Cada página aqui lista essas datas, a ferramenta cron para texto deste site explica qualquer expressão, e no Linux o systemd-analyze calendar faz o mesmo para valores de OnCalendar.

Revisado em por Arielton Oberek.