La estabilidad del servidor depende de que tus servicios principales se mantengan activos. Si MySQL falla o Nginx deja de responder, tus usuarios se enterarán antes que tú, a menos que tengas monitorización.
En esta guía, crearemos un script en bash para verificar el estado de servicios como mysql, apache2, nginx o docker y notificarte inmediatamente vía AlertHub si están caídos.
El Script de Vigilancia
Crearemos un script llamado check_services.sh. Iterará a través de una lista de servicios y verificará su estado usando systemctl.
Consejo: Este script utiliza la función
alerthub_alertde nuestra Guía de Webhooks en Bash. ¡Asegúrate de tenerla configurada!
- Crea el archivo:
nano ~/check_services.sh
- Pega el siguiente contenido:
#!/bin/bash
# Configuración
# Lista de servicios a monitorizar, separados por espacios
SERVICES=("mysql" "nginx" "ssh")
# Cargar función AlertHub
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
# Función para verificar un solo servicio
check_service() {
local service=$1
if systemctl is-active --quiet "$service"; then
echo "✅ $service está corriendo"
else
echo "❌ $service está CAÍDO"
# Enviar Alerta
# Usamos un título único por servicio para agrupar alertas efectivamente
alerthub_alert -t "$service está CAÍDO en $(hostname)" \
-d "El servicio '$service' ha dejado de funcionar. Se recomienda intentar reiniciarlo." \
-l "critical"
fi
}
# Bucle por todos los servicios definidos
for service in "${SERVICES[@]}"; do
check_service "$service"
done
Nota: Si no usas
alerthub_alert, puedes reemplazar esa línea con el comandocurlcrudo mostrado en nuestra guía de Uso de Disco.
Personalizando para tu Stack
Puedes modificar el array SERVICES para incluir lo que necesites.
- Stack LAMP:
SERVICES=("apache2" "mysql") - Stack LEMP:
SERVICES=("nginx" "mariadb" "php8.1-fpm") - Host Docker:
SERVICES=("docker" "containerd")
Auto-Reinicio (Opcional)
Puedes llevar este script más allá intentando reiniciar el servicio automáticamente antes de alertar:
if ! systemctl is-active --quiet "$service"; then
echo "Intentando reiniciar $service..."
sudo systemctl start "$service"
sleep 5
if ! systemctl is-active --quiet "$service"; then
alerthub_alert -t "$service FALLÓ al Recuperarse" -l "critical" -d "El servicio no pudo ser reiniciado automáticamente."
else
alerthub_alert -t "$service Reiniciado" -l "warning" -d "El servicio falló pero fue reiniciado exitosamente."
fi
fi
Programación
Al igual que nuestro monitor de disco, queremos que esto se ejecute con frecuencia. Para la disponibilidad de servicios, verificar cada 5 minutos es el estándar.
Añade esto a tu crontab (crontab -e):
*/5 * * * * /home/tu_usuario/check_services.sh
Conclusión
Con este script, ya no vuelas a ciegas. Ya sea una caída de base de datos o un fallo del servidor web, AlertHub asegura que seas el primero en saberlo, dándote la oportunidad de arreglarlo antes de que los clientes empiecen a quejarse.