From 3259caac2a07e3d5e2ab3160d8c559dfbc55f2c7 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 4 Oct 2024 13:34:57 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1adir=20scripts=20y=20configuraciones=20p?= =?UTF-8?q?ara=20monitorizaci=C3=B3n=20NFS,=20systemd=20y=20logrotate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 0 monitor_nfs.service | 11 +++++++++ monitor_nfs.sh | 57 +++++++++++++++++++++++++++++++++++++++++++ monitor_nfs_logrotate | 12 +++++++++ setup_monitor_nfs.sh | 43 ++++++++++++++++++++++++++++++++ 5 files changed, 123 insertions(+) create mode 100644 README.md create mode 100644 monitor_nfs.service create mode 100755 monitor_nfs.sh create mode 100644 monitor_nfs_logrotate create mode 100755 setup_monitor_nfs.sh 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." +