| Expression | Description | Category |
|---|---|---|
* * * * * | Every minute | Frequent |
*/2 * * * * | Every 2 minutes | Frequent |
*/5 * * * * | Every 5 minutes | Frequent |
*/10 * * * * | Every 10 minutes | Frequent |
*/15 * * * * | Every 15 minutes | Frequent |
*/30 * * * * | Every 30 minutes | Frequent |
0 * * * * | Every hour (at :00) | Hourly |
30 * * * * | Every hour at :30 | Hourly |
0 */2 * * * | Every 2 hours | Hourly |
0 */4 * * * | Every 4 hours | Hourly |
0 */6 * * * | Every 6 hours | Hourly |
0 */12 * * * | Every 12 hours | Hourly |
0 0 * * * | Every day at midnight | Daily |
0 1 * * * | Every day at 1:00 AM | Daily |
0 6 * * * | Every day at 6:00 AM | Daily |
0 9 * * * | Every day at 9:00 AM | Daily |
0 12 * * * | Every day at noon | Daily |
0 18 * * * | Every day at 6:00 PM | Daily |
0 23 * * * | Every day at 11:00 PM | Daily |
0 0,12 * * * | Twice daily — midnight and noon | Daily |
0 9 * * 1 | Every Monday at 9:00 AM | Weekly |
0 9 * * 1-5 | Every weekday (Mon–Fri) at 9:00 AM | Weekly |
0 9 * * MON-FRI | Every weekday at 9 AM (named) | Weekly |
0 0 * * 0 | Every Sunday at midnight | Weekly |
0 0 * * 6,0 | Every Saturday and Sunday at midnight | Weekly |
0 8 * * 1,3,5 | Mon/Wed/Fri at 8:00 AM | Weekly |
0 0 1 * * | 1st of every month at midnight | Monthly |
0 0 15 * * | 15th of every month at midnight | Monthly |
0 0 1,15 * * | 1st and 15th of every month | Monthly |
0 0 L * * | Last day of every month (Quartz/AWS) | Monthly |
0 0 1 */3 * | Every 3 months on the 1st at midnight | Monthly |
0 0 1 1 * | January 1st at midnight (New Year) | Yearly |
0 0 1 1,7 * | January 1st and July 1st at midnight | Yearly |
0 9 * * 1#1 | First Monday of every month at 9 AM (Quartz) | Advanced |
0 0 * * 5L | Last Friday of every month (Quartz) | Advanced |
0/30 9-17 * * MON-FRI | Every 30 min 9 AM–5 PM on weekdays | Advanced |
5 4 * * sun | 5 min past 4 AM every Sunday | Advanced |
┌─────────── minute (0–59) │ ┌────────── hour (0–23) │ │ ┌───────── day of month (1–31) │ │ │ ┌──────── month (1–12 or JAN–DEC) │ │ │ │ ┌───────── day of week (0–6, Sun=0 or SUN–SAT) │ │ │ │ │ * * * * * command to execute
| Character | Name | Meaning | Example |
|---|---|---|---|
| * | Wildcard | Any value | * in hour = every hour |
| , | List separator | Multiple values | 1,15 in day = 1st and 15th |
| - | Range | From–to inclusive | 1-5 in weekday = Mon–Fri |
| / | Step | Every N units | */5 in minute = every 5 min |
| ? | No specific value | Ignore field (Quartz/AWS) | ? in day when weekday set |
| L | Last | Last day/weekday | L in day = last day of month |
| W | Weekday | Nearest weekday | 15W = nearest weekday to 15th |
| # | Nth weekday | N-th day in month | 2#1 = 1st Monday |
| Platform | Format | Example |
|---|---|---|
| Linux/macOS crontab | min hr dom mon dow | 0 9 * * 1-5 |
| GitHub Actions | min hr dom mon dow | 0 9 * * 1-5 |
| AWS EventBridge | min hr dom mon dow year | 0 9 ? * MON-FRI * |
| Quartz (Java) | sec min hr dom mon dow [year] | 0 0 9 ? * MON-FRI |
| Kubernetes CronJob | min hr dom mon dow | 0 9 * * 1-5 |
Os campos aceitam sintaxe mista. Para executar uma tarefa às 8h e 18h em dias úteis:
0 8,18 * * 1-5
Para direcionar meses específicos com um passo:
0 0 1 1-12/3 * # A cada 3 meses começando em janeiro (Jan, Abr, Jul, Out)
Quando tanto o dia do mês quanto o dia da semana estão definidos (não *), o comportamento depende da implementação. No cron padrão, a tarefa executa se qualquer uma das condições for atendida — é uma relação OU, não E. Isso surpreende muitas pessoas.
0 0 15 * 1
Embora não seja uma expressão cron propriamente, @reboot é um atalho amplamente suportado:
@reboot /usr/local/bin/start-service.sh
Outros atalhos comuns:
| Atalho | Equivalente |
|---|---|
@yearly | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
O clássico. Edite seu crontab de usuário com crontab -e:
# Executar backup todo dia às 2h
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1
Tarefas cron do sistema em /etc/cron.d/ incluem um campo de usuário extra:
0 2 * * * root /usr/local/bin/cleanup.sh
O GitHub Actions usa a mesma sintaxe de cinco campos dentro de um gatilho schedule. Todos os horários são UTC.
on:
schedule:
- cron: '0 3 * * 1-5' # Dias úteis às 3h UTC
Para um aprofundamento na configuração YAML, veja YAML para Kubernetes e YAML para Docker Compose.
Se uma tarefa demora mais que o intervalo entre execuções, você terá instâncias sobrepostas. Um script que leva 8 minutos em um agendamento */5 * * * * vai acumular.
Soluções:
flock no Linux)concurrencyPolicy: Forbid nos CronJobs do Kubernetes0 0 31 * * # Só executa em meses com 31 dias
Isso executa em janeiro, março, maio, julho, agosto, outubro e dezembro — mas pula silenciosamente os outros cinco meses. Se você precisa de uma tarefa de fim de mês, considere executar no dia 1 e ajustar a lógica do seu script, ou use uma ferramenta que suporte semânticas de "último dia do mês".
Algumas implementações de cron requerem uma quebra de linha final no arquivo crontab. Se sua última entrada não executa, adicione uma linha vazia no final.
apiVersion: batch/v1
kind: CronJob
metadata:
name: nightly-report
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: reporting:latest
command: ["python", "generate_report.py"]
restartPolicy: OnFailure
Uma expressão cron é uma string com 5 ou 6 campos (minuto, hora, dia do mês, mês, dia da semana e opcionalmente segundos) para agendar tarefas automatizadas em sistemas Unix.
O asterisco (*) significa 'todo/toda'. Por exemplo, * no campo de minutos significa 'todo minuto', * no campo de horas significa 'toda hora' e assim por diante para cada tipo de campo.
O cron padrão Unix/Linux usa 5 campos (minuto hora dia mês dia_semana). Muitos agendadores modernos como AWS EventBridge e Kubernetes CronJobs suportam 6 campos com um campo de segundos opcional no início ou no final.
Use: 0 9 * * 1-5. Isso significa minuto=0, hora=9, qualquer dia do mês, qualquer mês, dia da semana segunda(1) a sexta(5).