Descripción
El servicio Linux NUT (Network UPS Tools) es un conjunto de programas de monitoreo y control para varias unidades de suministro de energía ininterrumpible (en adelante, UPS). Puede obtener una lista completa de los modelos compatibles mirando la lista de controladores en el archivo /usr/share/nut/driver.list .
El manual describe cómo deshabilitar el apagado de la PC por el agente NUT en caso de pérdida de voltaje en la red utilizando el ejemplo del UPS Eaton 5E 650iUSB en distribuciones similares a Ubuntu. Para usar bajo otras distribuciones, use el administrador de paquetes de su distribución o compile a partir de los códigos fuente. La última versión de Network UPS Tools se puede descargar en GitHub desde el enlace .
Instalar NUT
Primero necesitas instalar NUT:
root@hostname~# apt install nut
Haga una copia de seguridad de la carpeta con los archivos de configuración NUT:
root@hostname~# cp -r /etc/nut /etc/nut.orig
Ahora agregue una directiva que indique que el UPS está conectado a esta computadora, y no a la remota:
root@hostname~# echo "MODE=standalone" > /etc/nut/nut.conf
Ahora conecte el UPS a la computadora y vea la salida del comando lsusb :
root@hostname~# lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse Bus 001 Device 003: ID 1a2c:2124 China Resource Semico Co., Ltd Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS
Estamos buscando si el UPS es compatible con el servicio NUT. Puede verlo manualmente o mostrar líneas con la marca del UPS, por ejemplo:
root@hostname~# grep Eaton /usr/share/nut/driver.list ... "Eaton" "ups" "5" "5E650iUSB" "USB port" "usbhid-ups" ...
Ahora que hemos decidido el controlador, puede configurar el NUT.
Protección de archivos de configuración
Deben establecerse los permisos y propietarios correctos para los archivos de configuración NUT
root@hostname~# chown root:nut /etc/nut/* root@hostname~# chmod 640 /etc/nut/*
Configuración de la tuerca
Configuración del controlador, método de conexión y tiempo de apagado
Agregue las líneas al final del archivo /etc/nut/ups.conf o cree una nueva con el siguiente contenido:
root@hostname~# nano /etc/nut/ups.conf # NUT. [eaton] # driver = usbhid-ups # . port = auto # offdelay = 90 # ondelay = 5 # desc = "Eaton 5E 650iUSB"
Configuración del acceso de grupo del sistema NUT al UPS a través de USB
Para que NUT tenga acceso a la interfaz USB del UPS, debe escribir una regla de acceso para udev .
udev es un subsistema de gestión de dispositivos Linux. Gracias a udev, solo los dispositivos conectados actualmente se encuentran en la carpeta / dev .
Ejecuta el comando
root@hostname~# lsusb
y encuentre la línea correspondiente a la UPS. En nuestro ejemplo, esto
Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS
donde después la ID se convierte idVendor: idProduct ( 0463: ffff )
Ahora cree un archivo de reglas para udev :
root@hostname~# /etc/udev/rules.d/90-nut-ups.rules # Eaton 5E650iUSB ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0463", ATTR{idProduct}=="ffff", MODE="0660", GROUP="nut"
Después de crear la regla, debe reiniciar el servicio udev :
root@hostname~# service udev restart
Después de eso, desconecte y vuelva a conectar el cable USB del UPS. Después de eso, ejecute el comando para verificar el estado de la regla udev :
root@hostname~# upsdrvctl start Network UPS Tools - UPS driver controller 2.7.4 Network UPS Tools - Generic HID driver 0.41 (2.7.4) USB communication driver 0.33 Using subdriver: MGE HID 1.39
Si la salida es aproximadamente la misma, entonces todo está configurado correctamente.
Configure direcciones NUT y puertos de escucha para conexiones a NUT
Agregue las líneas al final del archivo /etc/nut/upsd.conf o cree una nueva con el siguiente contenido:
root@hostname~# nano /etc/nut/upsd.conf # Loopback 3493 LISTEN 127.0.0.1 3493
Tenga en cuenta que ESCUCHAR debe escribirse en mayúsculas, o nada funcionará.
Configurar el perfil de usuario para acceder a NUT
Creamos el monitor de usuario sin el derecho de inicio de sesión y la carpeta de inicio, con un UID de menos de 1000, para que se considere como un servicio y no en la pantalla de inicio de sesión del usuario, y con el GID del grupo de tuercas .
Descubra el GID del grupo de nueces :
root@hostname~# cat /etc/group | grep nut:x: nut:x:134:
Ahora recogemos el UID para el usuario. O elegimos uno que apenas es utilizado por ningún programa, por ejemplo, 339, o ejecutamos:
root@hostname~# cat /etc/passwd | grep [ 100 1000]
y si no muestra nada, el UID es gratuito y se puede usar para crear el usuario del monitor ascendente :
root@hostname~# useradd -d /dev/null -s /usr/sbin/nologin -u 339 -g 134 -p UPSPASS upsmonitor
Ahora agregue este usuario al archivo de perfil de usuario NUT /etc/nut/upsd.users :
root@hostname~# nano /etc/nut/upsd.users # [upsmonitor] # password = UPSPASS # , .. actions = SET # upscmd instcmds = ALL # NUT upsmon master
Configuraciones de monitoreo NUT
Agregue las líneas al final del archivo /etc/nut/upsmon.conf o cree una nueva con el siguiente contenido:
root@hostname~# nano /etc/nut/upsmon.conf # eaton localhost upsmonitor MONITOR eaton@localhost 1 upsmonitor UPSPASS master # MINSUPPLIES 1 # NUT, NOTIFYCMD /sbin/upssched # POLLFREQ 5 # POLLFREQALERT 5 # NUT HOSTSYNC 15 # NUT "" DEADTIME 15 # , , POWERDOWNFLAG /etc/killpower # NOTIFYMSG ONLINE "UPS %s on line power" # NOTIFYMSG ONBATT "UPS %s on battery" # NOTIFYMSG LOWBATT "UPS %s battery is low" # NOTIFYMSG FSD "UPS %s: forced shutdown in progress" # NOTIFYMSG COMMOK "Communications with UPS %s established" # , , USB NOTIFYMSG COMMBAD "Communications with UPS %s lost" # NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding" # NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced" # NOTIFYMSG NOCOMM "UPS %s is unavailable" # NUT upsmon NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible" # , NOTIFYFLAG. # SYSLOG , /var/log/syslog # WALL # EXEC , /etc/nut/upsshed.conf, NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC NOTIFYFLAG FSD SYSLOG+WALL+EXEC NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC # (12 ) RBWARNTIME 43200 # NUT , NOCOMM 300 NOCOMMWARNTIME 300 # FINALDELAY 5
Prueba de conexión
Veamos qué puede informar el UPS sobre su estado:
root@hostname~# upsc eaton@localhost battery.charge: 100 battery.runtime: 1964 battery.type: PbAc device.mfr: EATON device.model: 5E 650i device.type: ups driver.name: usbhid-ups driver.parameter.offdelay: 60 driver.parameter.pollfreq: 30 driver.parameter.pollinterval: 2 driver.parameter.port: auto driver.parameter.synchronous: no driver.version: 2.7.4 driver.version.data: MGE HID 1.39 driver.version.internal: 0.41 input.voltage: 228.0 outlet.1.status: on outlet.desc: Main Outlet outlet.id: 1 outlet.switchable: no output.frequency: 50.0 output.frequency.nominal: 50 output.voltage: 226.0 output.voltage.nominal: 230 ups.beeper.status: enabled ups.delay.shutdown: 60 ups.firmware: 03.08.0018 ups.load: 18 ups.mfr: EATON ups.model: 5E 650i ups.power.nominal: 650 ups.productid: ffff ups.start.battery: yes ups.status: OL ups.timer.shutdown: -1 ups.vendorid: 0463
Todos los campos son más o menos obvios o los definimos anteriormente en los archivos de configuración. Los códigos de estado del UPS se muestran en el campo ups.status: y pueden tomar valores:
- OL: el sistema funciona con una red;
- OB: el sistema funciona con batería;
- LB: el sistema funciona con una batería descargada.
Comandos y variables internas del UPS
El UPS puede emitir comandos directamente desde la consola utilizando el comando upscmd . Se puede obtener una lista de comandos disponibles ejecutando el comando:
root@hostname~# upscmd -l eaton@localhost Instant commands supported on UPS [eaton]: beeper.disable - Disable the UPS beeper beeper.enable - Enable the UPS beeper beeper.mute - Temporarily mute the UPS beeper beeper.off - Obsolete (use beeper.disable or beeper.mute) beeper.on - Obsolete (use beeper.enable) load.off - Turn off the load immediately load.off.delay - Turn off the load with a delay (seconds) shutdown.stop - Stop a shutdown in progress
La señal acústica . * La configuración controla la alarma del UPS en caso de pérdida de energía, load.off apaga la PC de inmediato, load.off. Demora en segundos antes de apagar la PC, shutdown.stop : comando para interrumpir el proceso de apagado de la PC.
En algunos UPS hay otras opciones, por ejemplo, una prueba de batería o apagado . En ese caso, la computadora se apagará, pero el UPS enviará una señal de inicio de la PC tan pronto como vuelva la alimentación de la red. Para que esto funcione, en el BIOS de la PC, debe habilitarse la función correspondiente, que generalmente se encuentra en algún lugar del área de configuración de energía.
Por ejemplo, apague el chirrido del UPS cuando se va la luz:
root@hostname~# upscmd -u upsmonitor -p UPSPASS eaton@localhost beeper.disable
Para habilitar, reemplace beeper.disable con beeper.enable .
Configuración del programador de tareas NUT actualizado
Agregue las líneas al final del archivo /etc/nut/upssched.conf o cree una nueva con el siguiente contenido:
root@hostname~# nano /etc/nut/upssched.conf # , CMDSCRIPT /etc/nut/cmd.sh PIPEFN /tmp/upspipe LOCKFN /tmp/upslock # case /etc/nut/cmd.sh AT COMMBAD * EXECUTE commbad AT COMMOK * EXECUTE commok AT NOCOMM * EXECUTE nocomm # . AT ONBATT * EXECUTE powerout # , shutdownnow cmd.sh AT ONBATT * START-TIMER shutdownnow 90 AT LOWBATT * EXECUTE shutdowncritical AT ONLINE * CANCEL-TIMER shutdownnow AT ONLINE * EXECUTE powerup
Ahora necesitamos el script /etc/nut/cmd.sh . Créelo, establezca los derechos y complételo:
root@hostname~# touch /etc/nut/cmd.sh root@hostname~# chmod 666 /etc/nut/cmd.sh root@hostname~# nano /etc/nut/cmd.sh #!/bin/sh # logger syslog case $1 in commbad) logger "UPS communications failure" ;; commok) logger "UPS communications restored" ;; nocomm) logger "UPS communications cannot be established" ;; powerout) # logger "UPS on battery. Shutdown in 90 seconds...." upscmd -u upsmonitor -p UPSPASS eaton@localhost shutdown.return ;; shutdownnow) logger "UPS has been on battery for 120 seconds. Starting orderly shutdown" # upsmon -c fsd ;; shutdowncritical) logger "UPS battery level CRITICAL. Shutting down NOW!!!!" # upsmon -c fsd ;; powerup) logger "UPS on line. Shutdown aborted." # upscmd -u upsmon -p pass mustek@localhost shutdown.stop ;; *) logger "Unrecognized command: $1" ;; esac
Conclusión
Esto completa la configuración. Puede probar arrancando el UPS del zócalo.