commit 3259caac2a07e3d5e2ab3160d8c559dfbc55f2c7 Author: root Date: Fri Oct 4 13:34:57 2024 +0200 Añadir scripts y configuraciones para monitorización NFS, systemd y logrotate diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/monitor_nfs.service b/monitor_nfs.service new file mode 100644 index 0000000..1abecf9 --- /dev/null +++ b/monitor_nfs.service @@ -0,0 +1,11 @@ +[Unit] +Description=Servicio de monitoreo de unidad NFS +After=network.target + +[Service] +ExecStart=/opt/scripts/monitor_nfs.sh +Restart=always +User=root + +[Install] +WantedBy=multi-user.target diff --git a/monitor_nfs.sh b/monitor_nfs.sh new file mode 100755 index 0000000..4773672 --- /dev/null +++ b/monitor_nfs.sh @@ -0,0 +1,57 @@ +#!/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" +} + +# Loop infinito para monitorear todas las unidades NFS +while true; do + if check_all_nfs_mounts; 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 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 + fi + # Espera 10 segundos antes de verificar nuevamente + sleep 10 +done + diff --git a/monitor_nfs_logrotate b/monitor_nfs_logrotate new file mode 100644 index 0000000..71e541f --- /dev/null +++ b/monitor_nfs_logrotate @@ -0,0 +1,12 @@ +/var/log/monitor_nfs.log { + daily # Rota los logs a diario + rotate 7 # Conserva los últimos 7 archivos de log + compress # Comprime los archivos de log rotados + delaycompress # Retrasa la compresión hasta el siguiente ciclo + missingok # No muestra error si el archivo de log no existe + notifempty # No rota el archivo si está vacío + create 644 root root # Crea un nuevo archivo de log después de rotarlo con permisos específicos + postrotate + systemctl reload monitor_nfs.service > /dev/null 2>&1 || true + endscript +} diff --git a/setup_monitor_nfs.sh b/setup_monitor_nfs.sh new file mode 100755 index 0000000..aa3000b --- /dev/null +++ b/setup_monitor_nfs.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# Configura las rutas +MONITOR_SCRIPT="monitor_nfs.sh" +SYSTEMD_SERVICE="monitor_nfs.service" +LOGROTATE_CONF="monitor_nfs_logrotate" +SYSTEMD_PATH="/etc/systemd/system" +LOGROTATE_PATH="/etc/logrotate.d" +SCRIPT_DEST="/opt/scripts" + +# Comprueba que se ejecuta como root +if [[ $EUID -ne 0 ]]; then + echo "Este script debe ejecutarse como root." + exit 1 +fi + +# Copia el script de monitoreo al directorio de destino y otorga permisos de ejecución +echo "Copiando el script de monitoreo a $SCRIPT_DEST..." +mkdir -p "$SCRIPT_DEST" +cp "$MONITOR_SCRIPT" "$SCRIPT_DEST/$MONITOR_SCRIPT" +chmod +x "$SCRIPT_DEST/$MONITOR_SCRIPT" + +# Copia el archivo de servicio systemd y recarga el daemon +echo "Instalando el servicio de systemd..." +cp "$SYSTEMD_SERVICE" "$SYSTEMD_PATH/$SYSTEMD_SERVICE" +systemctl daemon-reload + +# Copia el archivo de configuración de logrotate +echo "Configurando logrotate..." +cp "$LOGROTATE_CONF" "$LOGROTATE_PATH/monitor_nfs" +chmod 644 "$LOGROTATE_PATH/monitor_nfs" + +# Habilita y arranca el servicio +echo "Habilitando y arrancando el servicio de monitoreo..." +systemctl enable monitor_nfs.service +systemctl start monitor_nfs.service + +# Verifica el estado del servicio +echo "Estado del servicio monitor_nfs:" +systemctl status monitor_nfs.service + +echo "Configuración completada con éxito." +