--- title: "Monitorizar un SAI con NUT en Ubuntu 24.04" description: "Configura NUT en Ubuntu 24.04 para vigilar un SAI por USB, recibir avisos de corte de luz y apagar tus servidores de forma ordenada cuando la batería esté baja." category: "Gestión de Hardware y Sistema" language: es source: https://cubepath.com/es/docs/gestión-de-hardware-y-sistema/monitorizacion-de-ups-con-nut updated: 2026-09-25 --- # Monitorizar un SAI con NUT en Ubuntu 24.04 NUT (Network UPS Tools) es el software estándar en Linux para comunicarse con un SAI (UPS), leer su estado y apagar el servidor de forma ordenada antes de que se agote la batería. Un solo servidor conectado al SAI puede además compartir su estado por la red, para que el resto de máquinas alimentadas por el mismo SAI también se apaguen a tiempo. En este tutorial instalarás NUT en Ubuntu 24.04, configurarás un SAI conectado por USB, activarás el apagado automático y los avisos, y añadirás un segundo servidor como cliente de red. ## Requisitos previos - Un servidor físico con Ubuntu 24.04 LTS conectado a un SAI mediante cable USB (la mayoría de modelos de APC, Eaton, CyberPower o Salicru usan el driver `usbhid-ups`). - Un usuario no root con privilegios `sudo`. - Opcional: otros servidores alimentados por el mismo SAI, en la misma red de gestión que el primero, para el paso 6. - Opcional: un agente de correo funcionando y el comando `mail` si quieres avisos por email. > Nota: esta guía es para equipos propios, por ejemplo en una oficina o un rack local. En los servidores dedicados de CubePath la alimentación redundante y los SAI del centro de datos los gestiona CubePath, así que no necesitas NUT en ellos. ## Paso 1: Instalar NUT y detectar el SAI Comprueba que el sistema ve el SAI por USB: ```bash lsusb ``` ```output Bus 001 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply ``` Instala NUT. El paquete `nut` incluye el servidor (drivers y `upsd`) y el cliente (`upsmon`): ```bash sudo apt update sudo apt install nut ``` Usa `nut-scanner` para que te proponga la configuración del driver: ```bash sudo nut-scanner -U ``` ```output [nutdev1] driver = "usbhid-ups" port = "auto" vendorid = "051D" productid = "0002" product = "Back-UPS XS 1400U FW:926.T2 .I USB FW:T2" serial = "4B1234P56789" vendor = "American Power Conversion" bus = "001" ``` Anota el `driver` y, si vas a conectar más de un SAI, el `serial`. ## Paso 2: Configurar el driver del SAI Define el SAI en `/etc/nut/ups.conf`. El nombre entre corchetes (`sai` en este ejemplo) es el que usarás en el resto de la configuración: ```bash sudo nano /etc/nut/ups.conf ``` Añade al final: ```ini [sai] driver = usbhid-ups port = auto desc = "SAI del rack principal" ``` Si tienes varios SAI del mismo modelo, añade una línea `serial = ...` a cada uno para que el driver sepa cuál es cuál. A continuación indica a NUT que este equipo tiene el SAI conectado y lo vigila él mismo. Edita `/etc/nut/nut.conf`: ```bash sudo nano /etc/nut/nut.conf ``` Cambia la línea `MODE` a: ```ini MODE=standalone ``` Con `MODE=none` (el valor por defecto) los servicios de NUT no arrancan. Si en el paso 6 vas a compartir el SAI con otros servidores, usa ya `MODE=netserver`. ## Paso 3: Configurar el servidor upsd y su usuario `upsd` es el servicio que expone el estado del SAI a los clientes, incluido el propio `upsmon` local. Por ahora solo debe escuchar en localhost. Edita `/etc/nut/upsd.conf`: ```bash sudo nano /etc/nut/upsd.conf ``` Añade: ```text LISTEN 127.0.0.1 3493 LISTEN ::1 3493 ``` Crea el usuario con el que `upsmon` se conectará a `upsd`. Edita `/etc/nut/upsd.users`: ```bash sudo nano /etc/nut/upsd.users ``` Añade este bloque, sustituyendo `contraseña_segura_monitor` por una contraseña larga y aleatoria (por ejemplo, generada con `openssl rand -base64 24`): ```ini [upsmon] password = contraseña_segura_monitor upsmon primary ``` `upsmon primary` indica que este usuario corresponde al equipo conectado físicamente al SAI, el que decide cuándo empieza el apagado. Protege el archivo, porque contiene contraseñas: ```bash sudo chown root:nut /etc/nut/upsd.users sudo chmod 640 /etc/nut/upsd.users ``` Arranca el driver y el servidor. En Ubuntu 24.04 el servicio `nut-driver-enumerator` crea un servicio de driver por cada SAI definido en `ups.conf`: ```bash sudo systemctl restart nut-driver-enumerator.service sudo systemctl restart nut-server.service ``` Comprueba que NUT lee datos del SAI: ```bash upsc sai@localhost ``` ```output battery.charge: 100 battery.charge.low: 10 battery.runtime: 2460 battery.runtime.low: 120 device.mfr: American Power Conversion device.model: Back-UPS XS 1400U input.voltage: 231.0 ups.load: 18 ups.status: OL ``` Las variables más útiles son: - `ups.status`: `OL` (con corriente), `OB` (funcionando con batería), `LB` (batería baja), `RB` (hay que cambiar la batería). Pueden aparecer combinadas, por ejemplo `OB LB`. - `battery.charge` y `battery.runtime`: carga en porcentaje y autonomía estimada en segundos. - `battery.charge.low` y `battery.runtime.low`: los umbrales a partir de los cuales el SAI declara batería baja. ## Paso 4: Configurar upsmon para el apagado automático `upsmon` vigila el estado y, cuando el SAI está con batería y en batería baja (`OB LB`), apaga el sistema. Edita `/etc/nut/upsmon.conf`: ```bash sudo nano /etc/nut/upsmon.conf ``` Añade al final estas líneas, con la misma contraseña del paso anterior: ```text MONITOR sai@localhost 1 upsmon contraseña_segura_monitor primary MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -h +0" POLLFREQ 5 POLLFREQALERT 5 FINALDELAY 5 NOTIFYCMD /usr/local/bin/nut-notify NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC NOTIFYFLAG COMMBAD SYSLOG+EXEC NOTIFYFLAG COMMOK SYSLOG+EXEC NOTIFYFLAG REPLBATT SYSLOG+EXEC NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC ``` Qué hace cada directiva: - `MONITOR`: el SAI a vigilar, cuántas fuentes de alimentación del servidor dependen de él (1), el usuario, la contraseña y el papel (`primary`). - `MINSUPPLIES 1`: el servidor necesita al menos una fuente alimentada para seguir encendido. - `SHUTDOWNCMD`: el comando que se ejecuta para apagar. - `NOTIFYFLAG`: para cada evento, dónde se notifica: en el syslog, con un mensaje a las terminales abiertas (`WALL`) y ejecutando `NOTIFYCMD` (`EXEC`). Si quieres que el apagado empiece antes, con más margen de batería, puedes subir el umbral en `/etc/nut/ups.conf` dentro del bloque `[sai]` con `override.battery.charge.low = 40`. El driver pasará a declarar batería baja al 40 %. ## Paso 5: Crear el script de avisos El script que indica `NOTIFYCMD` recibe el mensaje como argumento y el tipo de evento en la variable `NOTIFYTYPE`. Este registra cada evento en el syslog y, si hay un comando `mail` disponible, envía un correo: ```bash sudo nano /usr/local/bin/nut-notify ``` ```bash #!/usr/bin/env bash set -euo pipefail destinatario="tu_correo@example.com" mensaje="${1:-evento sin mensaje}" tipo="${NOTIFYTYPE:-DESCONOCIDO}" logger -t nut-notify "${tipo}: ${mensaje}" if command -v mail >/dev/null 2>&1; then printf '%s\n' "${mensaje}" | mail -s "[SAI ${tipo}] $(hostname)" "${destinatario}" fi ``` Sustituye `tu_correo@example.com` por tu dirección. El script se ejecuta con el usuario `nut`, así que debe poder leerlo y ejecutarlo: ```bash sudo chmod 755 /usr/local/bin/nut-notify ``` Arranca `upsmon`: ```bash sudo systemctl restart nut-monitor.service ``` Comprueba que se ha conectado a `upsd`: ```bash sudo journalctl -u nut-monitor -n 10 --no-pager ``` ```output nut-monitor[1532]: UPS: sai@localhost (primary) (power value 1) nut-monitor[1532]: Using power down flag file /etc/killpower ``` ### Probar la configuración La prueba más fiable es desenchufar el SAI de la pared durante un minuto. En unos segundos `upsc sai@localhost ups.status` debe devolver `OB`, verás el aviso en las terminales abiertas y en el syslog: ```bash sudo journalctl -t nut-notify -n 5 --no-pager ``` ```output nut-notify[2210]: ONBATT: UPS sai@localhost on battery nut-notify[2215]: ONLINE: UPS sai@localhost on line power ``` Vuelve a enchufar el SAI antes de que llegue a batería baja. > Advertencia: para probar el apagado completo existe `sudo upsmon -c fsd`, que simula batería baja y apaga el servidor (y los clientes de red) de inmediato. Úsalo solo en una ventana de mantenimiento. ## Paso 6: Compartir el SAI con otros servidores de la red Si otros servidores se alimentan del mismo SAI, pueden recibir su estado del equipo que tiene el cable USB (el primario). En los ejemplos, el primario tiene la IP de gestión `10.0.0.10` y los clientes están en `10.0.0.0/24`. ### En el servidor primario Cambia el modo en `/etc/nut/nut.conf`: ```ini MODE=netserver ``` Haz que `upsd` escuche también en la IP de gestión añadiendo esta línea a `/etc/nut/upsd.conf`: ```text LISTEN 10.0.0.10 3493 ``` Crea un usuario para los clientes en `/etc/nut/upsd.users`, con otra contraseña distinta: ```ini [upsremoto] password = contraseña_segura_remoto upsmon secondary ``` Permite el puerto 3493 solo desde la red de gestión y reinicia los servicios: ```bash sudo ufw allow from 10.0.0.0/24 to any port 3493 proto tcp sudo systemctl restart nut-server.service nut-monitor.service ``` ### En cada servidor cliente Instala solo el cliente: ```bash sudo apt install nut-client ``` Comprueba que llega al primario: ```bash upsc sai@10.0.0.10 ups.status ``` ```output OL ``` Pon `MODE=netclient` en `/etc/nut/nut.conf` y añade a `/etc/nut/upsmon.conf`: ```text MONITOR sai@10.0.0.10 1 upsremoto contraseña_segura_remoto secondary MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -h +0" ``` Arranca el monitor: ```bash sudo systemctl restart nut-monitor.service ``` Cuando el SAI llegue a batería baja, el primario avisará a los clientes (`secondary`), esperará a que se desconecten y después se apagará él. Así los clientes siempre se apagan primero. ## Solución de problemas **`upsc` responde `Error: Driver not connected`.** El driver no está en marcha o no encuentra el SAI. Revisa su servicio con `systemctl status 'nut-driver@sai'` y el log con `sudo journalctl -u nut-driver@sai -n 30 --no-pager`. Comprueba que el nombre entre corchetes de `ups.conf` coincide con el que consultas. **El driver da `Permission denied` o `Can't claim USB device`.** El paquete instala reglas udev para los SAI conocidos. Desconecta y vuelve a conectar el cable USB para que se apliquen. Si tu modelo no está en la lista, `nut-scanner -U` mostrará sus `vendorid` y `productid` para que abras una incidencia o crees una regla udev con `GROUP="nut"`. **`upsmon` registra `Login on UPS [sai@localhost] failed - got [ACCESS-DENIED]`.** El usuario o la contraseña de `MONITOR` no coinciden con `upsd.users`, o `upsd` no se ha reiniciado tras editar el archivo. Revisa ambos y ejecuta `sudo systemctl restart nut-server.service nut-monitor.service`. **Los clientes muestran `Data stale` o `COMMBAD`.** Comprueba la conexión al puerto 3493 del primario (`nc -zv 10.0.0.10 3493`), la línea `LISTEN` de `upsd.conf` y la regla de UFW. ## Conclusión Tienes NUT leyendo el estado del SAI, avisando en cada corte y vuelta de la corriente, y apagando de forma ordenada el servidor primario y sus clientes de red antes de que se agote la batería. Como siguientes pasos: - Exporta las métricas del SAI a Prometheus con un exporter de NUT para vigilar la carga y la autonomía en el tiempo. - Revisa periódicamente `ups.status` en busca de `RB` y cambia las baterías cada 3 a 5 años. - Configura en la BIOS de cada servidor la opción de encendido automático al volver la corriente.