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ística | Cron | systemd Timers |
|---|---|---|
| Logs | Arquivos separados | journalctl |
| Dependências | Não | Sim |
| Persistência | Não | Sim (opcional) |
| Flexibilidade | Limitada | Alta |
| Simplicidade | Simples | Mais complexo |
| Disponibilidade | Em todo lugar | Requer 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