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
fi2. 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"
fi3. 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
fi4. 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
done5. 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"
fiAgendando 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
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.
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.
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

