5 Scripts Bash para Servidores Linux (Backup, Logs e Alertas)

script bash

A automação é a melhor amiga do SysAdmin. Painéis de controle e ferramentas robustas de monitoramento (como Zabbix ou Prometheus) são excelentes, mas exigem infraestrutura própria. Os scripts bash para servidores linux rodam nativamente, consomem pouquíssimos recursos (CPU/RAM) e garantem que, mesmo se o sistema de monitoramento principal falhar, o próprio servidor consiga se curar ou alertar a equipe a tempo.

Abaixo, veja os 5 scripts que não podem faltar na sua rotina:

1. Monitoramento de Espaço em Disco com Alerta

Um disco 100% cheio corrompe bancos de dados e derruba sites instantaneamente. Este script monitora a partição e envia um e-mail antes do desastre acontecer.

#!/bin/bash
# Monitoramento de uso de disco com alerta por E-mail
EMAIL_ADMIN="seu_email@dominio.com"
LIMITE=80
PARTICAO="/"
USO=$(df -h | grep "$PARTICAO$" | awk '{print $5}' | sed 's/%//g')
if [ "$USO" -gt "$LIMITE" ]; then
    MENSAGEM="O uso do disco na partição $PARTICAO do servidor $(hostname) atingiu ${USO}%."
    echo "$MENSAGEM" | mail -s "[ALERTA] Espaço em Disco Crítico - $(hostname)" "$EMAIL_ADMIN"
    echo "$(date '+%Y-%m-%d %H:%M:%S') - ALERTA ENVIADO: $MENSAGEM" >> /var/log/alerta_disco.log
fi

2. Backup com Rotação e Alerta de Falha

Fazer backup é regra, mas lotar o disco com backups antigos é um erro comum. Este script compacta os arquivos, deleta os mais velhos que 7 dias e só te envia um e-mail se algo der errado, mantendo sua caixa de entrada limpa.

#!/bin/bash
# Backup com rotação e alerta de erro
EMAIL_ADMIN="seu_email@dominio.com"
DIR_ORIGEM="/var/www/html"
DIR_DESTINO="/backup/site"
DATA=$(date +%Y%m%d_%H%M%S)
ARQUIVO_BKP="$DIR_DESTINO/backup_site_$DATA.tar.gz"
mkdir -p "$DIR_DESTINO"
tar -czf "$ARQUIVO_BKP" "$DIR_ORIGEM"
if [ $? -eq 0 ]; then
    find "$DIR_DESTINO" -type f -name "*.tar.gz" -mtime +7 -exec rm {} \;
    echo "$(date) - Backup OK." >> /var/log/backup.log
else
    MENSAGEM="Ocorreu um erro ao tentar realizar o backup do diretório $DIR_ORIGEM no servidor $(hostname)."
    echo "$MENSAGEM" | mail -s "[FALHA] Erro no Backup - $(hostname)" "$EMAIL_ADMIN"
fi

3. Limpeza Automática de Logs Antigos

Na criação de bons scripts bash para servidores linux, prever o crescimento de logs de aplicações web (como Nginx ou Apache) é fundamental. Este script limpa logs com mais de 30 dias e envia um mini-relatório.

#!/bin/bash
# Limpeza de logs com relatório por e-mail
EMAIL_ADMIN="seu_email@dominio.com"
DIR_LOGS="/var/log/minha_aplicacao"
DIAS_RETENCAO=30
if [ -d "$DIR_LOGS" ]; then
    QTD_ARQUIVOS=$(find "$DIR_LOGS" -type f -name "*.log" -mtime +$DIAS_RETENCAO | wc -l)
    
    if [ "$QTD_ARQUIVOS" -gt 0 ]; then
        find "$DIR_LOGS" -type f -name "*.log" -mtime +$DIAS_RETENCAO -exec rm -f {} \;
        MENSAGEM="$QTD_ARQUIVOS arquivos removidos com mais de $DIAS_RETENCAO dias de $DIR_LOGS em $(hostname)."
        echo "$MENSAGEM" | mail -s "[INFO] Limpeza de Logs - $(hostname)" "$EMAIL_ADMIN"
    fi
fi

4. Watchdog: Auto-Restart de Serviços Caídos

Se o PHP-FPM ou o MySQL pararem de madrugada, este script tenta “levantar” o serviço sozinho. Se conseguir, avisa; se falhar, envia um alerta crítico para intervenção manual.

#!/bin/bash
# Watchdog com notificação de status
EMAIL_ADMIN="seu_email@dominio.com"
SERVICOS=("nginx" "mysql" "php-fpm")
for SERVICO in "${SERVICOS[@]}"; do
    if ! systemctl is-active --quiet "$SERVICO"; then
        systemctl restart "$SERVICO"
        
        if systemctl is-active --quiet "$SERVICO"; then
            MENSAGEM="O serviço $SERVICO parou, mas o watchdog reiniciou com sucesso."
            ASSUNTO="[AVISO] Serviço $SERVICO reiniciado - $(hostname)"
        else
            MENSAGEM="ATENÇÃO: O serviço $SERVICO parou e NÃO pôde ser reiniciado!"
            ASSUNTO="[CRÍTICO] Falha no serviço $SERVICO - $(hostname)"
        fi
        
        echo "$MENSAGEM" | mail -s "$ASSUNTO" "$EMAIL_ADMIN"
    fi
done

5. Alerta de Memória RAM em Nível Crítico

Evite que o servidor use SWAP excessivamente (o que destrói a performance de I/O) monitorando quando a RAM livre cai abaixo de um limite seguro.

#!/bin/bash
# Monitoramento de RAM com alerta
EMAIL_ADMIN="seu_email@dominio.com"
LIMITE_MINIMO=500
MEM_DISPONIVEL=$(free -m | awk '/^Mem:/{print $7}')
if [ "$MEM_DISPONIVEL" -le "$LIMITE_MINIMO" ]; then
    MENSAGEM="Memória baixa em $(hostname): apenas ${MEM_DISPONIVEL}MB livres. Risco de OOM Killer."
    echo "$MENSAGEM" | mail -s "[ALERTA] RAM Crítica - $(hostname)" "$EMAIL_ADMIN"
fi

Agendando seus scripts bash para servidores linux com Cron

Nenhum desses scripts terá utilidade se não rodarem automaticamente. Utilize o utilitário Cron para agendá-los. Digite crontab -e no terminal e adicione as regras. Por exemplo, para rodar o watchdog a cada 5 minutos:

*/5 * * * * /root/scripts/watchdog.sh

Conclusão

Dominar a implementação de scripts bash para servidores linux transforma você de um bombeiro digital em um verdadeiro engenheiro de infraestrutura. Automações simples como essas garantem alta disponibilidade, evitam falhas humanas e liberam seu tempo para focar na otimização avançada da sua arquitetura.

FAQ

Por que é importante usar scripts bash para servidores linux?

Utilizar scripts bash para servidores linux garante a automação de tarefas repetitivas, como limpeza de logs e backups, reduzindo a chance de erro humano e evitando indisponibilidade de serviços críticos por falta de espaço em disco ou memória.

Como agendar a execução de um script bash no Linux?

A maneira mais eficiente de automatizar a execução é utilizando o Cron. Através do comando crontab -e, o administrador pode definir minutos, horas ou dias específicos para que o sistema rode o script em segundo plano.

Qual é o risco de rodar scripts de automação com root?

Executar scripts bash para servidores linux como usuário root dá acesso total ao sistema. Se houver um erro de digitação no script (como no uso do comando rm), arquivos vitais do sistema operacional podem ser apagados. Sempre teste seus scripts em ambientes de homologação antes de colocá-los em produção.

Veja Mais:

Erros comuns ao administrar servidores de hospedagem

Backup de todos os bancos de dados mysql em um servidor Linux

Reduzindo Ruído em Monitoramento de Servidores

Como Limpar WordPress Infectado: Guia de Recuperação via SSH

Como instalar Crowdsec