#!/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