Gerenciamento de Tarefas Agendadas e Infraestrutura de Armazenamento

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/command em vez de command) ou exportar $PATH no 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 postfix ou sendmail. 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:

  1. Physical Volume (PV): Partições ou discos inteiros inicializados para o LVM.
  2. Volume Group (VG): Pool de armazenamento agregado a partir de múltiplos PVs.
  3. 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) ou chattr +a /var/log/syslog (permite apenas anexação).
  • Mantenha hashes de integridade (SHA256) para binários essenciais e detecte alterações não autorizadas.

Tags: Linux cron logrotate lvm mbr

Publicado em 10-8 01:22