Sintaxe
Formato do Crontab
# ┌───── minute (0-59) # │ ┌───── hour (0-23) # │ │ ┌───── day of month (1-31) # │ │ │ ┌───── month (1-12) # │ │ │ │ ┌───── day of week (0-7, 0&7=Sun) # * * * * * command
Valores de Campo
*Qualquer valor (curinga)
,Lista de valores: 1,3,5
-Intervalo: 1-5
/Passo: */10 (a cada 10)
0-59Intervalo de minutos
0-23Intervalo de horas
1-31Intervalo de dia do mês
1-12Intervalo de mês (ou JAN-DEC)
0-7Dia da semana (0&7=Dom, ou SUN-SAT)
Strings Especiais
Agendamentos Abreviados
@rebootExecutar uma vez ao iniciar
@yearly0 0 1 1 * — uma vez por ano (1º de jan)
@monthly0 0 1 * * — uma vez por mês (dia 1)
@weekly0 0 * * 0 — uma vez por semana (domingo)
@daily0 0 * * * — uma vez por dia (meia-noite)
@hourly0 * * * * — uma vez por hora
Exemplos
Agendamentos Comuns
30 2 * * * /usr/local/bin/backup.sh 0 9 * * 1-5 /opt/report.sh */15 * * * * /usr/bin/health-check.sh 0 0 1 * * /opt/monthly-cleanup.sh 0 8,17 * * * /opt/notify.sh
Explicação dos Agendamentos
30 2 * * *Todo dia às 2:30
0 9 * * 1-5Dias úteis às 9:00
*/15 * * * *A cada 15 minutos
0 0 1 * *Primeiro dia do mês, meia-noite
0 8,17 * * *Todo dia às 8h e às 17h
Ambiente
Definindo Variáveis
SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin [email protected] HOME=/home/deploy * * * * * /opt/myjob.sh
Notas de Ambiente
SHELLShell usado para executar comandos (padrão /bin/sh)
PATHCaminho de busca (o padrão do cron é mínimo)
MAILTOEnviar saída para este e-mail (vazio = sem e-mail)
HOMEDiretório home para o job cron
Logging
Saída & Logging
# redirect stdout + stderr to a log file */5 * * * * /opt/job.sh >> /var/log/job.log 2>&1 # discard all output 0 3 * * * /opt/job.sh > /dev/null 2>&1 # log only errors 0 3 * * * /opt/job.sh > /dev/null 2>> /var/log/job-err.log
Visualizar Logs do Cron
# Debian / Ubuntu (syslog) grep CRON /var/log/syslog # RHEL / CentOS cat /var/log/cron # journalctl (systemd) journalctl -u cron --since "1 hour ago"
Agendamentos Comuns
Padrões do Dia a Dia
0 * * * *A cada hora (no início)
*/5 * * * *A cada 5 minutos
*/30 * * * *A cada 30 minutos
0 0 * * *Todo dia à meia-noite
0 6 * * 1Toda segunda-feira às 6h
0 0 1,15 * *Dia 1 e 15 do mês
0 0 * * 5Toda sexta-feira à meia-noite
0 0 1 1 *Todo dia 1 de janeiro
Comandos crontab
Gerenciar Crontabs
crontab -e # edit your crontab crontab -l # list your crontab crontab -r # remove your crontab crontab -u alice -l # list another user's (root) crontab /path/to/file # install crontab from file
Locais de Crontab do Sistema
/etc/crontabCrontab do sistema (tem campo de usuário)
/etc/cron.d/Arquivos cron drop-in
/etc/cron.daily/Scripts executados diariamente
/etc/cron.hourly/Scripts executados por hora
/etc/cron.weekly/Scripts executados semanalmente
/etc/cron.monthly/Scripts executados mensalmente
/var/spool/cron/Armazenamento de crontab por usuário
Dicas
Boas Práticas
Use caminhos absolutosO PATH do cron é mínimo; sempre use caminhos completos
Redirecione a saídaEvite floods de e-mail com > /dev/null 2>&1
Arquivos de lockUse flock para evitar execuções sobrepostas
Teste antesExecute o comando manualmente antes de agendar
Use MAILTODefina MAILTO="" para suprimir todo e-mail
Verifique o fuso horárioCron usa horário do sistema; verifique com date
Evitando Sobreposição com flock
# only run if not already running * * * * * /usr/bin/flock -n /tmp/job.lock /opt/job.sh