Automação de Processos via Cron
O sistema operacional Linux disponibiliza múltiplas camadas para execução de scripts e comandos em intervalos pré-definidos. O pacote cronie atua como o serviço padrão, responsável por interpretar tabelas de agendamento. Para execuções únicas, o atd é a ferramenta adequada, enquanto o anacron complementa ambientes que não operam ininterruptamente, garantindo a execução pendente assim que o sistema retorna ao estado ativo.
Configurações Globais e Rotação de Logs
O daemon do cron possui diretórios dedicados para execução periódica automática:
/etc/cron.hourly/: Execução a cada 60 minutos/etc/cron.daily/: Execução diária/etc/cron.weekly/: Execução semanal/etc/cron.monthly/: Execução mensal
Colocar um script executável nesses diretórios garante seu processamento automático. Para controle de acesso, o arquivo /etc/cron.deny bloqueia usuários específicos, e o /etc/crontab serve apenas como referência de sintaxe, nunca como arquivo de edição direta.
O gerenciamento de arquivos de registro é tratado pelo logrotate. Um exemplo de configuração personalizada para um serviço web fictício:
# /etc/logrotate.d/webserver-app
/var/log/webapp/access.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
create 0640 nginx nginx
postrotate
/usr/bin/kill -USR1 $(cat /var/run/nginx.pid 2>/dev/null) 2>/dev/null || true
endscript
}
Neste exemplo, o arquivo é rotacionado diariamente, mantendo sete cópias compactadas. O bloco postrotate notifiac o daemon do servidor para reabrir os descritores de arquivo após a rotação.
Edição e Sintaxe do Crontab
Os agendamentos por usuário são armazenados em /var/spool/cron/. A manipulação segura é feita exclusivamente através do comando crontab:
crontab -e # Abre o editor padrão para modificar a tabela
crontab -l # Exibe as regras atuais
crontab -r # Remove todas as entradas do usuário
A estrutura de uma linha de agendamento segue seis campos separados por espaço:
MINUTO HORÁRIO DIA_MÊS MÊS DIA_SEMANA COMANDO
(0-59) (0-23) (1-31) (1-12) (0-7)
Exemplo prático de backup automático de banco de dados:
30 02 * * 1-5 /usr/local/bin/db_backup.sh > /dev/null 2>&1
A tarefa acima executa um script às 02:30 de segunda a sexta-feira. O redirecionamento > /dev/null 2>&1 descarta toda a saída padrão e erros, prevenindo o acúmulo de mensagens no serviço de correio local.
Regras Críticas e Armadilhas Comuns
- Campos de Tempo: O uso de
*em campos superiores sem definir os inferiores pode gerar execuções em massa. Definir explicitamente todos os campos evita comportamentos inesperados. - Variáveis de Ambiente: O ambiente do cron é minimalista. Comandos devem usar caminhos absolutos (
/usr/bin/commandem vez decommand) ou exportar$PATHno início do script. - Caracteres Especiais: O símbolo
%é interpretado como nova linha pelo cron. Para uso literal, escape-o:\%. - Notificações por E-mail: Saídas não tratadas são enviadas para a caixa de correio local via
postfixousendmail. Se o serviço estiver desativado, as mensagens acumulam-se em/var/spool/postfix/maildrop/, consumindo inodes.
Arquitetura Física e Lógica de Discos
Discos magnéticos são organizados em superfícies (pratos), cabeças de leitura/gravação e braços mecânicos. A menor unidade física é o setor, historicamente com 512 bytes, mas evoluindo para 4096 bytes (4K) em formatos avançados. O sistema operacional agrupa setores consecutivos em blocos (ou clusters), que variam entre 1 KB e 4 KB dependendo do sistema de arquivos utilizado. A consulta via stat revela o tamanho do bloco de I/O:
stat /var
File: ‘/var’
Size: 4096 Blocks: 8 IO Block: 4096 directory
O acesso aos dados prioriza a leitura por cilindros (conjunto de trilhas verticalmente alinhadas em todos os pratos). Trocas entre cabeças são eletrônicas e rápidas, enquanto movimentações radiais do braço mecânico introduzem latência. Sistemas modernos e controladoras RAID mitigam essas limitações físicas através de cache e algoritmos de reordenamento de I/O.
Gerenciamento de Volume Lógico (LVM)
O LVM abstrai a estrutura física de armazenamento, permitindo manipulação dinâmica de capacidade sem desmontagem forçada. A arquitetura segue três camadas:
- Physical Volume (PV): Partições ou discos inteiros inicializados para o LVM.
- Volume Group (VG): Pool de armazenamento agregado a partir de múltiplos PVs.
- Logical Volume (LV): Dispositivo de bloco virtual formatável e montável, alocado dinamicamente do VG.
Recursos avançados incluem:
- Snapshots: Cópias instantâneas no momento da leitura, úteis para backups consistentes.
- Striping (0): Distribuição sequencial de dados entre múltiplos discos físicos, melhorando throughput de leitura/escrita.
- Mirroring: Duplicação em tempo real para tolerância a falhas de hardware.
Fluxo típico de criação:
pvcreate /dev/vdb1
vgcreate pool_dados /dev/vdb1
lvcreate -L 50G -n lv_dados pool_dados
mkfs.ext4 /dev/pool_dados/lv_dados
mkdir -p /srv/storage
mount /dev/pool_dados/lv_dados /srv/storage
Para expansão online (sem desmonatr):
lvextend -L +20G /dev/pool_dados/lv_dados
resize2fs /dev/pool_dados/lv_dados
Para redução (requer desmontagem e verificação prévia):
umount /srv/storage
e2fsck -f /dev/pool_dados/lv_dados
resize2fs /dev/pool_dados/lv_dados 40G
lvreduce -L 40G /dev/pool_dados/lv_dados
Nota: Sistemas de arquivos XFS permitem expansão online, mas não suportam redução nativa.
Esquemas de Particionamento: MBR e GPT
A estrutura de tabela de partição define como o sistema interpreta o disco. O formato MBR (Master Boot Record) armazena 446 bytes para código de boot, 64 bytes para tabela de partições e 2 bytes para assinatura (55AA). Limita-se a quatro partições primárias (ou três primárias + uma estendida) e não endereça corretamente discos acima de 2.2 TiB.
O GPT (GUID Partition Table) utiliza a estrutura LBA (Logical Block Addressing). Os primeiros 34 LBA contêm cabeçalhos e entradas de partição, permitindo até 128 partições nativas com endereçamento de 64 bits (suporte teórico até 8 ZiB). O GPT elimina a distinção entre primária/estendida/lógica, tratando todas como partições independentes. Inclui ainda uma área de backup no final do disco e soma de verificação CRC32 para integridade.
Para compatibilidade com firmware antigo, o GPT reserva o LBA0 como um "protective MBR". Já para ambientes UEFI modernos, é recomendável criar uma partição BIOS boot (2 MB) para o grub e uma partição EFI System (FAT32, 512 MB a 1 GB) para armazenamento de loaders e drivers de firmware.
Operações de Particionamento e Persistência
O utilitário fdisk é adequado para discos menores que 2 TB. O processo padrão envolve detecção, modificação, atualização do kernel e formatação:
fdisk /dev/vdc
# Dentro do menu interativo: n (novo) -> p (primária) -> aceitar defaults -> +20G -> w (gravar)
partprobe /dev/vdc # Notifica o kernel sobre alterações na tabela
mkfs.xfs /dev/vdc1 # Formatação rápida e moderna
mkdir /mnt/novodisco
mount /dev/vdc1 /mnt/novodisco
Para discos acima de 2 TB, o parted é obrigatório. Ele aplica alterações em tempo real, dispensando confirmação manual de gravação:
parted /dev/vdd mklabel gpt
parted /dev/vdd mkpart dados_ext4 ext4 0% 100%
mkfs.ext4 /dev/vdd1
A montagem persistente deve ser configurada em /etc/fstab usando identificadores UUID para garantir estabilidade diante de mudanças em nomes de dispositivos:
blkid /dev/vdc1
echo "UUID=<identificador_obtido> /mnt/novodisco ext4 defaults,noatime,nofail 0 2" >> /etc/fstab
O campo nofail impede que o sistema falhe na inicialização caso o disco esteja ausente. Scripts em /etc/rc.local são desencorajados em distribuições modernas devido à execução paralela do systemd e à ausência de dependências de serviço garantidas.
Extensão de Swap e Utilitários de Manutenção
Quando a memória RAM atinge seus limites, o kernel utiliza espaço de troca (swap). É possível criar arquivos de swap sem reparticionar:
dd if=/dev/zero of=/swapfile_extra bs=1M count=1024 status=progress
chmod 600 /swapfile_extra
mkswap /swapfile_extra
swapon /swapfile_extra
echo "/swapfile_extra none swap sw 0 0" >> /etc/fstab
Diferente de /dev/null (que descarta dados), /dev/zero gera um fluxo infinito de bytes nulos, útil para pré-alocação segura. Comandos adicionais para diagnóstico:
dumpe2fs -h /dev/sdXn: Exibe parâmetros internos do sistema de arquivos ext4.fsck -n /dev/sdXn: Simulação de verificação sem correção automática (seguro para diagnóstico).iotop -o: Monitorea processos com maior consumo de I/O de disco.sync: Força a gravação de buffers pendentes no armazenamento físico.
Boas Práticas de Segurança
- Adote instalações mínimas para reduzir a superfície de ataque.
- Desative login root remoto e altere portas padrão de administração.
- Utilize atributos imutáveis para arquivos críticos:
chattr +i /bin/ls(impede modificação) ouchattr +a /var/log/syslog(permite apenas anexação). - Mantenha hashes de integridade (SHA256) para binários essenciais e detecte alterações não autorizadas.