monitor_nfs/monitor_nfs.sh

87 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# Configura el nombre del servicio y el archivo de log
SERVICE_NAME="deluged"
LOG_FILE="/var/log/monitor_nfs.log"
# Obtiene las rutas de montaje NFS desde /etc/fstab, excluyendo líneas comentadas
get_nfs_mount_points() {
grep -E '^[^#].*\s+nfs\s' /etc/fstab | awk '{print $2}'
}
# Verifica si todas las unidades NFS están montadas
check_all_nfs_mounts() {
local all_mounted=true
for mount_point in $(get_nfs_mount_points); do
if ! mount | grep -q "$mount_point"; then
all_mounted=false
break
fi
done
$all_mounted && return 0 || return 1
}
# Registra mensajes en el archivo de log
log_message() {
local message="$1"
echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >> "$LOG_FILE"
}
# Función para controlar el servicio
control_service() {
if check_all_nfs_mounts; then
if command -v systemctl > /dev/null; then
if ! systemctl is-active --quiet "$SERVICE_NAME"; then
log_message "Todas las unidades NFS están montadas. Intentando iniciar el servicio $SERVICE_NAME..."
if systemctl start "$SERVICE_NAME"; then
log_message "El servicio $SERVICE_NAME se ha iniciado correctamente."
else
log_message "Error al iniciar el servicio $SERVICE_NAME. Intentando detener el servicio..."
systemctl stop "$SERVICE_NAME"
log_message "El servicio $SERVICE_NAME se ha detenido después de un error al intentar iniciarlo."
fi
else
log_message "Todas las unidades NFS están montadas y el servicio $SERVICE_NAME ya está activo."
fi
else
if ! service "$SERVICE_NAME" status > /dev/null; then
log_message "Todas las unidades NFS están montadas. Intentando iniciar el servicio $SERVICE_NAME..."
if service "$SERVICE_NAME" start; then
log_message "El servicio $SERVICE_NAME se ha iniciado correctamente."
else
log_message "Error al iniciar el servicio $SERVICE_NAME. Intentando detener el servicio..."
service "$SERVICE_NAME" stop
log_message "El servicio $SERVICE_NAME se ha detenido después de un error al intentar iniciarlo."
fi
else
log_message "Todas las unidades NFS están montadas y el servicio $SERVICE_NAME ya está activo."
fi
fi
else
if command -v systemctl > /dev/null; then
if systemctl is-active --quiet "$SERVICE_NAME"; then
log_message "Una o más unidades NFS no están montadas. Deteniendo el servicio $SERVICE_NAME..."
systemctl stop "$SERVICE_NAME"
log_message "El servicio $SERVICE_NAME se ha detenido."
else
log_message "Una o más unidades NFS no están montadas y el servicio $SERVICE_NAME ya está detenido."
fi
else
if service "$SERVICE_NAME" status > /dev/null; then
log_message "Una o más unidades NFS no están montadas. Deteniendo el servicio $SERVICE_NAME..."
service "$SERVICE_NAME" stop
log_message "El servicio $SERVICE_NAME se ha detenido."
else
log_message "Una o más unidades NFS no están montadas y el servicio $SERVICE_NAME ya está detenido."
fi
fi
fi
}
# Loop infinito para monitorear todas las unidades NFS
while true; do
control_service
# Espera 10 segundos antes de verificar nuevamente
sleep 10
done