La description
Le service Linux NUT (Network UPS Tools) est un ensemble de programmes de surveillance et de contrôle pour diverses unités d'alimentation sans coupure (ci-après UPS). Une liste complète des modèles pris en charge peut être obtenue en consultant la liste des pilotes dans le fichier /usr/share/nut/driver.list .
Le manuel décrit comment désactiver l'arrêt du PC par l'agent NUT en cas de perte de tension dans le réseau en utilisant l'exemple de l'onduleur Eaton 5E 650iUSB sur des distributions de type Ubuntu. Pour une utilisation sous d'autres distributions, utilisez le gestionnaire de packages de votre distribution ou compilez à partir des codes source. La dernière version de Network UPS Tools peut être téléchargée sur GitHub à partir du lien lien .
Installer NUT
Vous devez d'abord installer NUT:
root@hostname~# apt install nut
Faites une copie de sauvegarde du dossier avec les fichiers de configuration NUT:
root@hostname~# cp -r /etc/nut /etc/nut.orig
Ajoutez maintenant une directive indiquant que l'onduleur est connecté à cet ordinateur, et non à celui distant:
root@hostname~# echo "MODE=standalone" > /etc/nut/nut.conf
Connectez maintenant l'onduleur à l'ordinateur et voyez la sortie de la commande 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
Nous recherchons si l'onduleur est pris en charge par le service NUT. Vous pouvez le visualiser manuellement ou afficher des lignes avec le nom de marque de l'onduleur, par exemple:
root@hostname~# grep Eaton /usr/share/nut/driver.list ... "Eaton" "ups" "5" "5E650iUSB" "USB port" "usbhid-ups" ...
Maintenant que nous avons choisi le pilote, vous pouvez configurer le NUT.
Protection des fichiers de configuration
Les autorisations et les propriétaires corrects doivent être définis pour les fichiers de configuration NUT
root@hostname~# chown root:nut /etc/nut/* root@hostname~# chmod 640 /etc/nut/*
Configuration de NUT
Configuration du pilote, de la méthode de connexion et de l'heure d'arrêt
Ajoutez les lignes à la fin du fichier /etc/nut/ups.conf ou créez-en une nouvelle avec le contenu suivant:
root@hostname~# nano /etc/nut/ups.conf # NUT. [eaton] # driver = usbhid-ups # . port = auto # offdelay = 90 # ondelay = 5 # desc = "Eaton 5E 650iUSB"
Configuration de l'accès du groupe de systèmes NUT à l'onduleur via USB
Pour que le NUT ait accès à l'interface USB de l'onduleur, vous devez écrire une règle d'accès pour udev .
udev est un sous-système de gestion de périphériques Linux. Grâce à udev, seuls les appareils actuellement connectés se trouvent dans le dossier / dev .
Exécutez la commande
root@hostname~# lsusb
et recherchez la ligne correspondant à l'onduleur. Dans notre exemple, cette
Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS
où après l' ID va idVendor: idProduct ( 0463: ffff )
Créez maintenant un fichier de règles pour 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"
Après avoir créé la règle, vous devez redémarrer le service udev :
root@hostname~# service udev restart
Après cela, déconnectez et reconnectez le câble USB de l'onduleur. Après cela, exécutez la commande pour vérifier l' intégrité de la règle 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 sortie est approximativement la même, alors tout est configuré correctement.
Configurer les adresses NUT et les ports d'écoute pour les connexions à NUT
Ajoutez les lignes à la fin du fichier /etc/nut/upsd.conf ou créez-en une nouvelle avec le contenu suivant:
root@hostname~# nano /etc/nut/upsd.conf # Loopback 3493 LISTEN 127.0.0.1 3493
Gardez à l'esprit que LISTEN doit être écrit en majuscules, sinon rien ne fonctionnera.
Configurer le profil utilisateur pour accéder à NUT
Nous créons l'utilisateur upsmonitor sans droit de connexion et dossier d'accueil, avec un UID inférieur à 1000, afin qu'il soit considéré comme un service et non sur l'écran de connexion de l'utilisateur, et avec le GID du groupe nut .
Découvrez le GID du groupe de noix :
root@hostname~# cat /etc/group | grep nut:x: nut:x:134:
Maintenant, nous prenons l'UID pour l'utilisateur. Soit nous en choisissons un qui n'est guère utilisé par aucun programme, par exemple 339, soit nous exécutons:
root@hostname~# cat /etc/passwd | grep [ 100 1000]
et s'il n'affiche rien, l'UID est gratuit et peut être utilisé pour créer l'utilisateur upsmonitor :
root@hostname~# useradd -d /dev/null -s /usr/sbin/nologin -u 339 -g 134 -p UPSPASS upsmonitor
Ajoutez maintenant cet utilisateur au fichier de profil utilisateur NUT /etc/nut/upsd.users :
root@hostname~# nano /etc/nut/upsd.users # [upsmonitor] # password = UPSPASS # , .. actions = SET # upscmd instcmds = ALL # NUT upsmon master
Paramètres de surveillance NUT
Ajoutez les lignes à la fin du fichier /etc/nut/upsmon.conf ou créez-en une nouvelle avec le contenu suivant:
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
Test de connexion
Voyons ce que l'onduleur peut signaler sur son état:
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
Tous les champs sont plus ou moins évidents ou ont été définis par nos soins dans les fichiers de configuration précédents. Les codes d'état de l'onduleur sont affichés dans le champ ups.status: et peuvent prendre des valeurs:
- OL - le système fonctionne sur un réseau;
- OB - le système fonctionne sur batterie;
- LB - le système fonctionne sur une batterie déchargée.
Commandes et variables internes de l'onduleur
L'onduleur peut émettre des commandes directement à partir de la console à l'aide de la commande upscmd . Une liste des commandes disponibles peut être obtenue en exécutant la commande:
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
Le bip. * Les paramètres contrôlent l'alarme de l'onduleur en cas de perte de tension, load.off arrête immédiatement le PC, load.off.delay délai en secondes avant d'arrêter le PC, shutdown.stop - commande pour interrompre le processus d'arrêt du PC.
Dans certains onduleurs, il existe d'autres options, par exemple, un test de batterie ou un retour à l' arrêt , auquel cas l'ordinateur sera éteint, mais l'onduleur enverra un signal de démarrage PC dès que l'alimentation secteur sera rétablie. Pour que cela fonctionne, dans le BIOS du PC, la fonction correspondante, qui se trouve généralement quelque part dans la zone des paramètres d'alimentation, doit être activée.
Par exemple, éteignez l'onduleur UPS lorsque l'alimentation est coupée:
root@hostname~# upscmd -u upsmonitor -p UPSPASS eaton@localhost beeper.disable
Pour l'activer, remplacez beeper.disable par beeper.enable .
Configuration de NUT Task Scheduler upssched
Ajoutez les lignes à la fin du fichier /etc/nut/upssched.conf ou créez-en une nouvelle avec le contenu suivant:
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
Nous avons maintenant besoin du script /etc/nut/cmd.sh . Créez-le, définissez les droits et remplissez-le:
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
Conclusion
Ceci termine la configuration. Vous pouvez tester en arrachant l'onduleur de la prise.