Introducción
Los scripts Bash son la navaja suiza del sysadmin. Aquí tienes una colección de scripts prácticos para tareas cotidianas.
1. Monitor de disco
#!/bin/bash
THRESHOLD=80
df -h --output=pcent,target | tail -n+2 | while read usage mount; do
pct=${usage%\%}
if [ "$pct" -ge "$THRESHOLD" ]; then
echo "ALERTA: $mount está al $usage"
fi
done
2. Backup con rotación
#!/bin/bash
BACKUP_DIR="/backups"
DAYS=7
tar czf "$BACKUP_DIR/backup-$(date +%F).tar.gz" /etc /opt/app
find "$BACKUP_DIR" -name "backup-*.tar.gz" -mtime +$DAYS -delete
3. Limpieza de logs
#!/bin/bash
find /var/log -name "*.log" -mtime +30 -exec truncate -s 0 {} \;
journalctl --vacuum-time=7d
4. Verificación de servicios
#!/bin/bash
SERVICES=("nginx" "postgresql" "redis")
for svc in "${SERVICES[@]}"; do
if ! systemctl is-active --quiet "$svc"; then
echo "$svc caído, reiniciando..."
sudo systemctl restart "$svc"
fi
done
5. Info rápida del sistema
#!/bin/bash
echo "=== $(hostname) ==="
echo "Uptime: $(uptime -p)"
echo "CPU: $(nproc) cores - Load: $(cat /proc/loadavg | cut -d' ' -f1-3)"
echo "RAM: $(free -h | awk '/Mem:/{print $3"/"$2}')"
echo "Disco: $(df -h / | awk 'NR==2{print $3"/"$2" ("$5")"}')"
6. Alerta de memoria alta
#!/bin/bash
THRESHOLD=85
usage=$(free | awk '/Mem:/{printf("%.0f", $3/$2*100)}')
if [ "$usage" -ge "$THRESHOLD" ]; then
echo "ALERTA: uso de memoria al ${usage}%"
fi
7. Sincronización de directorios con rsync
#!/bin/bash
SOURCE="/srv/app/"
DEST="backup@192.168.1.50:/data/app/"
rsync -avz --delete "$SOURCE" "$DEST"
8. Comprobación de puertos críticos
#!/bin/bash
PORTS=(22 80 443 5432)
for port in "${PORTS[@]}"; do
if ! ss -lnt | awk '{print $4}' | grep -q ":$port$"; then
echo "ALERTA: puerto $port no está escuchando"
fi
done
9. Renovación automática de certificados (Let’s Encrypt)
#!/bin/bash
certbot renew --quiet
if [ $? -eq 0 ]; then
systemctl reload nginx
fi
10. Inventario básico de servidores
#!/bin/bash
OUT="/tmp/inventario-$(date +%F).csv"
echo "host,ip,kernel,uptime" > "$OUT"
for host in "$@"; do
ssh "$host" "echo -n \"$host,\"; hostname -I | awk '{print \$1}' | tr -d '\n'; echo -n ','; uname -r | tr -d '\n'; echo -n ','; uptime -p"
done >> "$OUT"
echo "Inventario generado en: $OUT"
Conclusión
Automatizar tareas repetitivas con Bash ahorra tiempo y reduce errores. Guarda estos scripts en un repositorio y adáptalos a tu entorno.
## Nota
✍️ Transparencia: Este artículo ha sido creado con el apoyo de herramientas de inteligencia artificial. Toda la información técnica ha sido revisada y validada por el autor antes de su publicación.