Gerador de expressões cron
Cria uma expressão cron campo a campo, lê-a em linguagem simples, vê as próximas execuções em qualquer fuso horário e converte-a para systemd, Quartz ou AWS.
Em linguagem simples
O dia do mês e o dia da semana estão ambos definidos: o cron clássico corre quando QUALQUER UM deles corresponde (não os dois).
Construtor
| Campo | Modo | Valor |
|---|---|---|
| Segundo0–59 | ||
| Minuto0–59 | ||
| Hora0–23 | ||
| Dia do mês1–31, L | ||
| Mês1–12 ou JAN–DEC | ||
| Dia da semana0–7 (0 e 7 = domingo) ou SUN–SAT |
Próximas execuções
Outros formatos
- linha do crontab
- systemd OnCalendar=
- Quartz / Spring
- AWS EventBridge
Como criar uma expressão cron
- Escreve ou cola uma expressão em Expressão cron, ou escolhe uma nas Predefinições. Macros como
@dailyou@weeklytambém são aceites. - Ou usa o Construtor: para cada campo, escolhe um Modo (Todos, A cada N, Valores específicos, Intervalo ou Personalizado) e preenche o Valor. A expressão atualiza-se à medida que avanças, e editar a expressão atualiza o construtor.
- Marca Adicionar um campo de segundos (6 campos) se o teu agendador suportar segundos.
- Lê o horário Em linguagem simples (a descrição aparece em português) e verifica depois a lista Próximas execuções. Escolhe o Fuso horário do servidor que corre a tarefa e Quantas execuções queres listar.
- Copia a expressão com Copiar ou usa um dos Outros formatos.
Os erros são explicados campo a campo, por exemplo «Minuto: 61 está fora do intervalo (0–59)», para saberes exatamente o que corrigir.
Os cinco campos do cron
Uma linha de cron padrão (Vixie) tem cinco campos, seguidos do comando:
| Campo | Valores permitidos |
|---|---|
| Minuto | 0–59 |
| Hora | 0–23 |
| Dia do mês | 1–31 |
| Mês | 1–12 ou JAN–DEC |
| Dia da semana | 0–7 (0 e 7 são domingo) ou SUN–SAT |
Cada campo aceita * (todos os valores), uma lista 1,15, um intervalo 9-17, um passo */15 (a cada 15 unidades) ou um intervalo com passo 0-30/10. Assim, */15 9-17 * * 1-5 significa a cada 15 minutos das 9:00 às 17:45, de segunda a sexta.
Há uma regra que surpreende muita gente: quando o Dia do mês e o Dia da semana estão ambos restringidos, o cron clássico corre quando qualquer um deles corresponde. 0 0 13 * 5 corre em todos os dias 13 e em todas as sextas-feiras, não só nas sextas-feiras 13. Nesse caso, a ferramenta mostra um aviso.
Próximas execuções e fusos horários
O cron usa o relógio da máquina, ou a definição CRON_TZ/TZ do crontab. A lista Próximas execuções é calculada para o fuso horário que escolheres, incluindo as mudanças da hora de verão: na mudança da primavera, uma tarefa marcada para as 2:30 pode ser saltada, e no outono pode correr uma ou duas vezes, conforme a implementação. Para tarefas que têm de correr exatamente uma vez, prefere horas fora do intervalo 1:00–3:00 ou usa UTC.
Vixie cron, temporizadores systemd, Quartz e AWS
- Os temporizadores systemd usam
OnCalendar=com outra sintaxe:Mon..Fri *-*-* 09..17:00/15:00. As condições de dia da semana e de data são combinadas com E, não com OU, por isso algumas expressões cron não têm equivalente exato. - O Quartz e o Spring põem um campo de segundos no início e podem acrescentar um campo de ano. Um dos dois campos de dia tem de ser
?, e o Quartz numera os dias da semana de 1 a 7 a partir de domingo, ao contrário do 0–6 do cron. A ferramenta escreve os dias da semana pelo nome (MON-FRI) para evitar essa armadilha. - O AWS EventBridge usa
cron(minutos horas dia mês dia-da-semana ano): seis campos, sem segundos, um?num dos campos de dia e o ano no fim.
O cron padrão não tem campo de segundos. A forma com 6 campos e segundos é suportada por muitas bibliotecas (node-cron, Spring, Quartz), mas não pelo crontab do sistema.
Perguntas frequentes
Como corro uma tarefa a cada 5 minutos?
Usa */5 * * * *. A tarefa corre aos minutos 0, 5, 10… de todas as horas.
Como corro uma tarefa no último dia do mês?
Muitos agendadores aceitam L no campo do dia do mês: 0 18 L * *. Com o Vixie cron simples, corre a tarefa todos os dias de 28 a 31 e verifica no script se amanhã é dia 1.
O que faz o @reboot?
Corre o comando uma vez, quando o daemon do cron arranca. Não tem horário, por isso a ferramenta não consegue listar execuções.
Porque é que a minha tarefa não corre à hora indicada?
Verifica o fuso horário do servidor, o crontab do utilizador versus o /etc/crontab (que tem um campo extra para o utilizador) e o PATH: o cron arranca com um ambiente mínimo.
O domingo é 0 ou 7?
Ambos. No campo do dia da semana, 0 e 7 significam domingo, 1 é segunda-feira e 6 é sábado.
Ferramentas relacionadas
- Conversor de timestamp Unix Converte timestamps Unix em segundos ou milissegundos em datas legíveis na hora local, em UTC e em ISO 8601, e transforma qualquer data em tempo epoch.
- Conversor de fusos horários Converte uma data e hora de um fuso horário para vários outros ao mesmo tempo, com a hora de verão tratada automaticamente. Pesquisa qualquer fuso IANA.
- Calculadora chmod Converte permissões de ficheiros Unix entre caixas, notação octal (755) e simbólica (rwxr-xr-x), com setuid, setgid, sticky bit e comandos chmod prontos.