Pular para o conteúdo principal

Capítulo 8.3 - Cron Avançado e systemd Timers

Objetivos de Aprendizagem​

Ao final deste capítulo, você será capaz de:

  • Utilizar cron do sistema (/etc/crontab, /etc/cron.d)
  • Compreender anacron
  • Criar systemd timers
  • Comparar cron vs systemd timers
  • Gerenciar logs do cron
  • Implementar tarefas agendadas avançadas

Cron do Sistema​

/etc/crontab​

Formato com usuário:

# /etc/crontab
# Formato: MIN HORA DIA MÊS DIA_SEMANA USUÁRIO COMANDO

# Exemplo
0 2 * * * root /usr/local/bin/backup.sh
*/15 * * * * www-data /usr/local/bin/check.sh

Editar:

sudo nano /etc/crontab

/etc/cron.d/​

Diretório para arquivos de cron do sistema:

# Criar arquivo
sudo nano /etc/cron.d/minha-tarefa

# Formato (com usuário)
0 2 * * * user1 /usr/local/bin/script.sh

# Permissões importantes
sudo chmod 644 /etc/cron.d/minha-tarefa

Vantagens:

  • Organização por arquivo
  • Fácil de gerenciar
  • Não precisa de crontab -e

Diretórios Especiais​

/etc/cron.hourly/   # Executado a cada hora (00:00)
/etc/cron.daily/ # Executado todo dia (06:25)
/etc/cron.weekly/ # Executado toda semana (domingo 06:47)
/etc/cron.monthly/ # Executado todo mês (dia 1 às 06:52)

Coloque scripts executáveis (sem extensão .sh)


Anacron​

Para Sistemas Não 24/7​

Anacron executa tarefas mesmo se o sistema estava desligado.

# Configuração
/etc/anacrontab

# Formato
# período atraso identificador comando
1 5 backup /usr/local/bin/backup.sh
7 10 weekly-clean /usr/local/bin/cleanup.sh

Funcionamento:

  • Verifica se a tarefa foi executada no período
  • Se não, executa após o atraso
  • Ideal para laptops, sistemas intermitentes

systemd Timers​

Alternativa Moderna ao Cron​

Vantagens:

  • Integração com systemd
  • Logs com journalctl
  • Dependências entre unidades
  • Mais flexível

Criar um Timer​

Service:

# /etc/systemd/system/backup.service
[Unit]
Description=Backup Diário

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup
StandardOutput=journal
StandardError=journal

Timer:

# /etc/systemd/system/backup.timer
[Unit]
Description=Timer para Backup Diário
Requires=backup.service

[Timer]
OnCalendar=daily
OnCalendar=02:00
Persistent=true

[Install]
WantedBy=timers.target

Ativar:

sudo systemctl daemon-reload
sudo systemctl enable backup.timer
sudo systemctl start backup.timer

Sintaxe OnCalendar​

# Formato: DiaDaSemana Ano-Mês-Dia Hora:Minuto:Segundo

# Todos os dias às 2h
OnCalendar=daily
OnCalendar=02:00

# Todas as segundas às 9h
OnCalendar=Mon *-*-* 09:00:00

# Dia 1 de cada mês
OnCalendar=monthly
OnCalendar=*-*-01 00:00:00

# A cada hora
OnCalendar=hourly

# A cada 15 minutos
OnCalendar=*:0/15

Opções do Timer​

[Timer]
# Agendamento
OnCalendar=daily
OnBootSec=10min
OnUnitActiveSec=1h

# Persistência (executa se perdeu)
Persistent=true

# Acurácia (execução aproximada)
AccuracySec=1min

# Randomização
RandomizedDelaySec=5min

Comparação Cron vs Timers​

CaracterísticaCronsystemd Timers
LogsArquivos separadosjournalctl
DependênciasNãoSim
PersistênciaNãoSim (opcional)
FlexibilidadeLimitadaAlta
SimplicidadeSimplesMais complexo
DisponibilidadeEm todo lugarRequer systemd

Gerenciamento de Logs​

Logs do Cron​

# Logs do sistema
/var/log/syslog # Ubuntu/Debian
/var/log/cron # Red Hat/CentOS

# Ver logs do cron
sudo grep CRON /var/log/syslog
sudo tail -f /var/log/syslog | grep CRON

Logs do systemd Timers​

# Logs do timer
sudo journalctl -u backup.timer

# Logs do serviço
sudo journalctl -u backup.service

# Acompanhar
sudo journalctl -u backup.timer -f

# Desde data
sudo journalctl -u backup.timer --since "2024-01-01"

Exemplos Avançados​

Backup com Timer​

Service:

[Unit]
Description=Backup Automático

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup
StandardOutput=journal
StandardError=journal

Timer:

[Unit]
Description=Timer Backup Diário

[Timer]
OnCalendar=daily
OnCalendar=02:00
Persistent=true
RandomizedDelaySec=30min

[Install]
WantedBy=timers.target

Limpeza com Cron​

# /etc/cron.daily/cleanup
#!/bin/bash
# Limpeza diária

find /var/log -name "*.log" -mtime +30 -delete
find /tmp -type f -mtime +7 -delete

Monitoramento com Timer​

Service:

[Unit]
Description=Check Disk Space

[Service]
Type=oneshot
ExecStart=/usr/local/bin/check-disk.sh

Timer:

[Unit]
Description=Timer Check Disk

[Timer]
OnCalendar=*:0/15
OnBootSec=5min

[Install]
WantedBy=timers.target

Boas Práticas​

Cron​

  • Usar caminhos absolutos
  • Redirecionar saída/erros
  • Testar scripts manualmente
  • Documentar nos comentários
  • Verificar logs regularmente

systemd Timers​

  • Criar serviço separado
  • Usar Persistent=true se necessário
  • Configurar RandomizationDelay
  • Testar primeiro com OnBootSec
  • Monitorar com journalctl

Resumo​

Neste capítulo, você aprendeu:

Cron do sistema: /etc/crontab, /etc/cron.d/, diretórios especiais
Anacron: Para sistemas intermitentes
systemd timers: Alternativa moderna com dependências
Sintaxe: OnCalendar para agendamento flexível
Logs: journalctl para timers, /var/log para cron
Comparação: Cron simples, timers mais poderosos
Prática: Backup, limpeza, monitoramento agendados


Próximos Passos​

Módulo 9: Segurança de Sistema
Módulo 10: Gerenciamento de Pacotes


Capítulo criado em: Dezembro 2024