Guia rápido de cron para imprimir
Este guia de cron reúne a sintaxe do crontab em uma página para imprimir: os cinco campos de tempo e suas faixas, os caracteres * , - /, as macros como @daily, 20 agendamentos prontos, os comandos do crontab e as armadilhas que fazem tarefas falharem sem aviso.
Cabe em uma página: A4, Carta.
cron
Sintaxe do crontab de cinco campos, 20 agendamentos comuns e diferenças entre plataformas
Os cinco campos
- 0-59Minuto
- 0-23Hora
- 1-31Dia do mês
- 1-12Mês JAN-DEC
- 0-6Dia da semana domingo = 0 (7 também é domingo no cronie, Debian, node-cron, Spring); SUN-SAT
Uma linha do crontab
- */5 * * * * /usr/local/bin/job.sh >> /var/log/job.log 2>&1minuto hora dia-do-mês mês dia-da-semana comando
Caracteres especiais
- *Todos os valores do campo
* * * * *a cada minuto - ,Lista de valores
0 9,17 * * *às 09:00 e às 17:00 - -Faixa inclusiva
0 9 * * 1-5de segunda a sexta - /Passo, dentro do campo
*/15 * * * *minutos 0, 15, 30, 45 - a-b/nPasso dentro de uma faixa
0 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
- @yearly0 0 1 1 *1º de janeiro às 00:00 (@annually)
- @monthly0 0 1 * *Dia 1 de cada mês às 00:00
- @weekly0 0 * * 0Domingo às 00:00
- @daily0 0 * * *Todo dia às 00:00 (@midnight)
- @hourly0 * * * *Minuto 0 de toda hora
- @rebootUma vez quando o daemon do cron inicia
20 agendamentos comuns
- * * * * *No início de cada minuto
- */5 * * * *Nos minutos 0, 5, 10, …, 55 de toda hora
- */10 * * * *Nos minutos 0, 10, 20, 30, 40 e 50
- */15 * * * *Em :00, :15, :30 e :45 de toda hora
- */30 * * * *Nos minutos 0 e 30 de toda hora
- 0 * * * *No minuto 0 de toda hora (
@hourly) - 0 */2 * * *No minuto 0 de toda hora par
- 0 */6 * * *Às 00:00, 06:00, 12:00 e 18:00
- 0 */12 * * *Às 00:00 e às 12:00
- 0 9,21 * * *Às 09:00 e às 21:00
- 0 0 * * *Uma vez por dia, às 00:00 (
@daily) - 0 9 * * *Uma vez por dia, às 09:00
- 0 0 * * 1-5Às 00:00, de segunda a sexta
- 0 9 * * 1-5Às 09:00, de segunda a sexta
- 0 0 * * 0,6Às 00:00 de sábado e de domingo
- 0 0 * * 1Às 00:00 de toda segunda-feira
- 0 0 * * 0Uma vez por semana, domingo às 00:00 (
@weekly) - 0 0 1 * *Uma vez por mês, dia 1 às 00:00 (
@monthly) - 0 0 1 1,4,7,10 *1º de jan, abr, jul e out às 00:00
- 0 0 1 1 *Uma vez por ano, 1º de janeiro às 00:00 (
@yearly)
Armadilhas
- \%
%no comando vira quebra de linha: escape como\% - PATHA tarefa roda com ambiente mínimo: use caminhos absolutos
- TZHora local do servidor; o cronie lê
CRON_TZ. Serviços hospedados usam UTC - 1 * 1Dia do mês e dia da semana preenchidos: roda quando QUALQUER um bate
- */7Passos recomeçam a cada hora: de :56 para :00 são 4 minutos
- 2>&1A saída vai por e-mail ou se perde: mande para um arquivo de log
Comandos do crontab
- crontab -eEdita seu crontab no $VISUAL ou $EDITOR
- crontab -lMostra seu crontab
- crontab -rApaga o crontab inteiro, sem volta (-i pergunta antes)
- sudo crontab -u <user> -eEdita o crontab de outro usuário
Onde roda
- crontab (cronie, Debian)Fuso: Do servidor, ou
CRON_TZ(cronie). mín.: 1 minuto. 0-7, nomes; macros; semL - GitHub ActionsFuso: UTC, ou
timezone. mín.: 5 minutos, pode atrasar. 0-6, nomes; sem macros - Kubernetes CronJobFuso:
spec.timeZone, senão o do controlador. mín.: 1 minuto. 0-6, nomes; macros;?=* - VercelFuso: Só UTC. mín.: 1 minuto (Pro), 1 dia (Hobby). 0-6; sem nomes; não aceita os dois campos de dia
- Cloudflare WorkersFuso: Só UTC. mín.: 1 minuto. 1 = domingo … 7 = sábado;
L,W,# - node-cron 4.xFuso: Do processo, ou opção
timezone. mín.: 1 segundo. 0-7, nomes;L,W,#; campos de dia com E - Timer do systemdFuso: Do sistema, ou fuso no fim. mín.: Menos de 1 segundo (ajuste
AccuracySec). Sintaxe própria:Mon..Fri *-*-* 09:00 - Spring @ScheduledFuso: Da JVM, ou
zone. mín.: 1 segundo. 0-7, nomes;L,W,#; macros - QuartzFuso: Da JVM, ou do trigger. mín.: 1 segundo. 1 = domingo … 7 = sábado;
?obrigatório
O que tem no guia
Os 20 agendamentos são os mais procurados, de a cada minuto até uma vez por ano, cada um com a expressão exata e quando ele dispara. Todos levam a uma página com as próximas execuções e o mesmo agendamento para GitHub Actions, Kubernetes, Vercel, Cloudflare, node-cron, systemd e Spring.
O bloco de plataformas existe porque os mesmos cinco campos não se comportam igual em todo lugar: Vercel e Cloudflare rodam sempre em UTC, o GitHub Actions não aceita menos de 5 minutos, e Cloudflare e Quartz contam os dias da semana a partir de 1 = domingo. É nessas diferenças que expressões copiadas quebram.
Como imprimir em uma página
Escolha o papel acima do guia e clique em Imprimir / Salvar PDF. A página mede o guia na largura desse papel e ajusta a escala para ocupar uma folha, nunca abaixo de 7pt, e esconde o cabeçalho, o rodapé, os anúncios e os botões do site. A impressão sai sempre em preto no branco, seja qual for o tema da tela.
Na janela de impressão deixe a Escala em Padrão (100%) e as Margens em Padrão. Para gerar um PDF, escolha Salvar como PDF no destino. O Safari ignora o tamanho de papel que a página pede, então selecione o mesmo papel na janela dele.
Incorpore ou crie um link para este guia
Um link para esta página na sua documentação, wiki ou README é o melhor jeito de compartilhar: quem clicar sempre vê a versão atual e o botão de imprimir. Copie um destes:
<a href="https://www.arielton.com/pt/cheatsheets/cron">Guia rápido de cron para imprimir</a> por <a href="https://www.arielton.com/pt">Arielton Oberek</a>[Guia rápido de cron para imprimir](https://www.arielton.com/pt/cheatsheets/cron) por [Arielton Oberek](https://www.arielton.com/pt)Se a sua equipe quer o mesmo tratamento para uma API interna, uma CLI ou um guia de estilo, escreva para contact@arielton.com.
Perguntas frequentes
- O que significa */5 * * * * no cron?
- Rodar em todo minuto divisível por 5, ou seja, nos minutos 0, 5, 10 e assim por diante até 55, em toda hora de todo dia, no fuso da máquina ou do serviço que executa a tarefa.
- Como agendar uma tarefa cron em dias úteis às 9h?
- Use 0 9 * * 1-5: minuto 0, hora 9, qualquer dia do mês, qualquer mês, de segunda (1) a sexta (5). Na Vercel ou na Cloudflare isso é 09:00 UTC, que corresponde a 06:00 no horário de Brasília.
- Por que meu script funciona no terminal e não no cron?
- O cron inicia as tarefas com um ambiente mínimo: /bin/sh, um PATH curto e nada do seu perfil de shell. Use caminhos absolutos, defina variáveis no topo do crontab, escape o % como \% e mande a saída para um arquivo de log para ler o erro.
- Domingo é 0 ou 7 no cron?
- Os dois, no cronie, no cron do Debian, no node-cron e no Spring. GitHub Actions, Kubernetes e Vercel só aceitam de 0 a 6, então 0 é a escolha portável. Cloudflare e Quartz são a exceção: lá 1 é domingo e 7 é sábado.
Revisado em por Arielton Oberek.