Descrição do produto
O serviço Linux NUT (Network UPS Tools) é um conjunto de programas de monitoramento e controle para várias unidades de fonte de alimentação ininterruptas (doravante UPS). Uma lista completa dos modelos suportados pode ser obtida consultando a lista de drivers no arquivo /usr/share/nut/driver.list .
O manual descreve como desativar o desligamento do PC pelo agente NUT em caso de perda de tensão na rede usando o exemplo do no-break Eaton 5E 650iUSB em distribuições do tipo Ubuntu. Para uso em outras distribuições, use o gerenciador de pacotes da sua distribuição ou compile a partir dos códigos-fonte. A versão mais recente do Network UPS Tools pode ser baixada no GitHub no link do link .
Instalar NUT
Primeiro você precisa instalar o NUT:
root@hostname~# apt install nut
Faça uma cópia de backup da pasta com os arquivos de configuração NUT:
root@hostname~# cp -r /etc/nut /etc/nut.orig
Agora adicione uma diretiva indicando que o no-break está conectado a este computador, e não ao remoto:
root@hostname~# echo "MODE=standalone" > /etc/nut/nut.conf
Agora conecte o no-break ao computador e veja a saída do 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 procurando se o no-break é suportado pelo serviço NUT. Você pode visualizá-lo manualmente ou exibir linhas com o nome da marca do no-break, por exemplo:
root@hostname~# grep Eaton /usr/share/nut/driver.list ... "Eaton" "ups" "5" "5E650iUSB" "USB port" "usbhid-ups" ...
Agora que decidimos o driver, você pode configurar a NUT.
Proteção de arquivo de configuração
As permissões e os proprietários corretos devem ser definidos para os arquivos de configuração NUT
root@hostname~# chown root:nut /etc/nut/* root@hostname~# chmod 640 /etc/nut/*
Configuração NUT
Configurando o driver, método de conexão e tempo de desligamento
Adicione as linhas ao final do arquivo /etc/nut/ups.conf ou crie uma nova com o seguinte conteúdo:
root@hostname~# nano /etc/nut/ups.conf # NUT. [eaton] # driver = usbhid-ups # . port = auto # offdelay = 90 # ondelay = 5 # desc = "Eaton 5E 650iUSB"
Configurando o acesso do grupo de sistemas NUT ao no-break via USB
Para que a NUT tenha acesso à interface USB do no-break, você precisa escrever uma regra de acesso para o udev .
O udev é um subsistema de gerenciamento de dispositivos Linux. Graças ao udev, apenas os dispositivos atualmente conectados estão localizados na pasta / dev .
Execute o comando
root@hostname~# lsusb
e encontre a linha correspondente ao no-break. No nosso exemplo, isso
Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS
onde após o ID passa idVendor: idProduct ( 0463: ffff )
Agora crie um arquivo de regras para o 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"
Após criar a regra, você deve reiniciar o serviço udev :
root@hostname~# service udev restart
Depois disso, desconecte e reconecte o cabo USB do no-break. Depois disso, execute o comando para verificar a integridade da regra do 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
Se a saída for aproximadamente a mesma, tudo estará configurado corretamente.
Configurar endereços e portas NUT para ouvir conexões NUT
Adicione as linhas no final do arquivo /etc/nut/upsd.conf ou crie uma nova com o seguinte conteúdo:
root@hostname~# nano /etc/nut/upsd.conf # Loopback 3493 LISTEN 127.0.0.1 3493
Lembre-se de que ESCUTE deve ser escrito em letras maiúsculas ou nada funcionará.
Configurar perfil de usuário para acessar NUT
Criamos o monitor de usuário sem o direito de login e pasta inicial, com um UID menor que 1000, para que ele seja considerado um serviço e não na tela de login do usuário e com o GID do grupo nut .
Descubra o GID do grupo de nozes :
root@hostname~# cat /etc/group | grep nut:x: nut:x:134:
Agora escolhemos o UID para o usuário. Ou escolhemos um que dificilmente é usado por qualquer programa, por exemplo, 339, ou executamos:
root@hostname~# cat /etc/passwd | grep [ 100 1000]
e se ele não exibir nada, o UID é gratuito e pode ser usado para criar o usuário upsmonitor :
root@hostname~# useradd -d /dev/null -s /usr/sbin/nologin -u 339 -g 134 -p UPSPASS upsmonitor
Agora adicione este usuário ao arquivo de perfil de usuário NUT /etc/nut/upsd.users :
root@hostname~# nano /etc/nut/upsd.users # [upsmonitor] # password = UPSPASS # , .. actions = SET # upscmd instcmds = ALL # NUT upsmon master
Configurações de monitoramento NUT
Adicione as linhas ao final do arquivo /etc/nut/upsmon.conf ou crie uma nova com o seguinte conteúdo:
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
Teste de conexão
Vamos ver o que o no-break pode relatar sobre sua condição:
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 os campos são mais ou menos óbvios ou foram definidos por nós nos arquivos de configuração anteriores. Os códigos de status do no-break são exibidos no campo ups.status: e podem receber valores:
- OL - o sistema é alimentado por uma rede;
- OB - o sistema funciona com energia da bateria;
- LB - o sistema funciona com uma bateria descarregada.
Comandos e variáveis internas do no-break
O no-break pode emitir comandos diretamente do console usando o comando upscmd . Uma lista de comandos disponíveis pode ser obtida executando o 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
O sinal sonoro. * As configurações controlam o alarme do no-break em caso de perda de tensão, load.off desliga o PC imediatamente, load.off.delay demora em segundos antes de desligar o PC, shutdown.stop - comando para interromper o processo de desligamento do PC.
Em alguns no-breaks, existem outras opções, por exemplo, teste de bateria ou desligamento . Retorno ; nesse caso, o computador será desligado, mas o no-break enviará um sinal de início do PC assim que a energia da rede elétrica retornar. Para que isso funcione, na BIOS do PC, a função correspondente, que geralmente está localizada em algum lugar na área de configurações de energia, deve estar ativada.
Por exemplo, desligue o no-break quando a energia acabar:
root@hostname~# upscmd -u upsmonitor -p UPSPASS eaton@localhost beeper.disable
Para ativar, substitua beeper.disable por beeper.enable .
Configurando o Agendador de Tarefas NUT atualizado
Adicione as linhas no final do arquivo /etc/nut/upssched.conf ou crie uma nova com o seguinte conteúdo:
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
Agora precisamos do script /etc/nut/cmd.sh . Crie, defina os direitos e preencha:
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
Conclusão
Isso completa a instalação. Você pode testar retirando o no-break do soquete.