![]()
Network UPS Tools
Network UPS Tools部署
NUT配置ups_nut客户端
要实现PVE主机配合山特UPS在断电后自动停止虚拟机、通知极空间NAS关机,以及来电自动开机的功能,推荐使用NUT(Network UPS Tools)方案,目前方案是pve作为客户端,极空间作为服务端。
apt update && apt install nut-client -y
#配置监控服务
nano /etc/nut/upsmon.conf
RUN_AS_USER root
MONITOR ups0@192.168.50.88 1 nut nut slave
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0”
NOTIFYCHD /usr/sbin/upssched
POLLFREO 2
POLLFREOALERT 1
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
#通知服务配置
NOTIFYMSG ONLINE “UPS %s line power”
NOTIFYMSG ONBATE “UPS %s on battery"
NOTIFYMSG LONBATT "UPS %s battery is low"
NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMОK "Communications with UPS %s established"
NOTIFYMSG COMMBAD “Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
NOTIFYMSG NOCОMM "UPS %s is unavailable"
NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG CОMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
#扫描UPS,获取设备驱动、端口、厂商ID等信息
nut -scanner -U
#编辑NUT配置文件
nano /etc/nut/nut.conf
MODE = netclient
#配置定时模式
nano /etc/nut/upssched.conf
CMDSCRIPT /etc/nut/upssched-cmd
PIPEFN /etc/nut/upssched.pipe
LOCKFN /etc/nut/upssched.lock
AT ONBATT * START-TIMER onbatt 30
AT ONLINE * CANCEL-TIMER onbatt online
AT ONBATT * START-TIMER earlyshutdown 30
AT LOWBATT * EXECUTE onbatt
AT COMMBAD * START-TIMER commbad 30
AT COMMOK * CANCEL-TIMER commbad commok
AT NOCOMM * EXECUTE commbad
AT SHUTDOWN * EXECUTE powerdown
#执行定义UPS关机脚本的配置文件
nano /etc/nut/upssched-cmd
#!/bin/sh
case $1 in
onbatt)
logger -t upssched-cmd "UPS running on battery"
;;
earlyshutdown)
logger -t upssched-cmd "UPS on battery too long, early shutdown"
/usr/sbin/upsmon -c fsd
;;
shutdowncritical)
logger -t upssched-cmd "UPS on battery critical, forced shutdown"
/usr/sbin/upsmon -c fsd
;;
upsgone)
logger -t upssched-cmd "UPS has been gone too long, can't reach"
;;
*)
logger -t upssched-cmd "Unrecognized command: $1"
;;
esac
#启动服务
systemctl start nut-client nut-server
#测试服务
upsc myups@localhost
NUT配置ups_nut服务端
#查看ups电源在那个usb口
lsusb
#更新安装服务端和客户端
apt update
apt update && apt install nut nut-client nut-server -y
#查看ups电源信息
nut -scanner -U
#查询ups信息展示
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 15
battery.runtime: 1800
battery.type: PbAc
device.mfr: EATON
device.model: SANTAK TG-BOX 850
device.serial: Blank
device.type: ups
driver.name: usbhid-ups
driver.parameter.lowbatt: 15
driver.parameter.offdelay: 60
driver.parameter.pollfreq: 15
driver.parameter.pollinterval: 15
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.version: 2.8.0
driver.version.data: MGE HID 1.46
driver.version.internal: 0.47
driver.version.usb: libusb-0.1 (or compat)
input.transfer.high: 264
input.transfer.low: 184
outlet.1.desc: PowerShare Outlet 1
outlet.1.id: 1
outlet.1.status: on
outlet.1.switchable: no
outlet.desc: Main Outlet
outlet.id: 0
outlet.switchable: yes
output.frequency.nominal: 50
output.voltage: 230.0
output.voltage.nominal: 220
ups.beeper.status: enabled
ups.delay.shutdown: 60
ups.delay.start: 30
ups.firmware: 02.08.0010
ups.load: 17
ups.mfr: EATON
ups.model: SANTAK TG-BOX 850
ups.power.nominal: 850
ups.productid: ffff
ups.realpower: 116
ups.serial: Blank
ups.status: OL
ups.timer.shutdown: -1
ups.timer.start: -1
ups.type: offline / line interactive
ups.vendorid: 0463
记下driver\pid\vid\bus\port等信息
#备份ups配置文件
cp /etc/nut/ups.conf /etc/nut/ups.example.conf
#编辑配置新的ups文件
nano /etc/nut/ups.conf
pollinterval = 1
maxretry = 3
[tgbox850] # UPS自定义名称
driver = usbhid-ups # 驱动(CyberPower常用blazer_usb)
port = auto # 自动检测USB端口
desc = "My SANTAK TG-BOX 850" #备注名称
vendorid = 0463 # 替换为nut-scanner输出的VID
productid = ffff # 替换为PID
#备份ups配置文件
cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf
nano /etc/nut/upsmon.conf
#配置文件 tgbox850,ups定义的名称;@localhost,本机ip地址;1显示的是连接几台ups;admin和123是用户名密码;master是主从服务标识【master/slave】;如果设置多个ups这里要填写多遍。
RUN_AS_USER root #表示必须root用户运行,可根据情况设置
MONITOR tgbox850@localhost 1 admin 123 master
#配置主从服务如果是本机连接可以设置127.0.0.1 。
cp /etc/nut/upsd.conf /etc/nut/upsd.example.conf
nano /etc/nut/upsd.conf
LISTEN 0.0.0.0 3493
#配置nut运行模式目前有【netserver服务模式,netclient客户端模式】
cp /etc/nut/nut.conf /etc/nut/nut.example.conf
nano /etc/nut/nut.conf
MODE=netserver
#用户配置,[admin]用户名,admin master,admin为主账户
cp /etc/nut/upsd.users /etc/nut/upsd.example.users
nano /etc/nut/upsd.users
[admin]
password = 123
admin master
#重启服务
service nut-server restart
service nut-client restart
systemctl restart nut-monitor
upsdrvctl stop
upsdrvctl start
#重启输出展示
Network UPS Tools - UPS driver controller 2.7.4
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:
#查询特定某一项ups信息
upsc ups0@localhost battery.charge
查询特定信息则在后面加上相应变量
#安装网页端可视化
apt install apache2 nut-cgi -y
#修改网页端配置参数
cp /etc/nut/hosts.conf /etc/nut/hosts.example.conf
nano /etc/nut/hosts.conf
MONITOR ups0@192.168.50.88 "My SANTAK TG-BOX 850"
多个ups可以多行编写
#执行
a2enmod cgi
systemctl restart apache2
#基本参数不用改动
cp /etc/nut/upsset.conf /etc/nut/upsset.example.conf
nano /etc/nut/upsset.conf
I_HAVE_SECURED_MY_CGI_DIRECTORY
#与UPS链接的电脑IP后面添加/cgi-bin/nut/upsstats.cgi
示例:http://192.178.33.108/cgi-bin/nut/upsstats.cgi
NUT配置Docker客户端
#Docker
version: "3.1
services:
nut:
image: teknologist/webnut
containor_nane: wobnut
environment:
- UPS_HOST = 192.168.0.120
- UPS_PORT = 3493
- UPS USER = admin
- UPS PASSNORD = V40M8aBV
restart: unless-stopped
security_opt:
- no-new-privileges:true
ports :
- 6443:6543
nutweb:
container_name: nutweb
image: ghcr.nju.edu.cn/superioone/nut_webgui:latest
restart: unless-stopped
environment:
UPSD_ADDR: 192.168.1.254 # 实际就是宿主机内网地址
UPSD_USER: nutdev1
UPSD_PASS: admin
networks:
- nginx_ipv4
```.preview-wrapper pre::before { position: absolute; top: 0; right: 0; color: #ccc; text-align: center; font-size: 0.8em; padding: 5px 10px 0; line-height: 15px; height: 15px; font-weight: 600; } .hljs.code\_\_pre > .mac-sign { display: flex; } h2 strong { color: inherit !important; }
> 本文使用 [文章同步助手](https://juejin.cn/post/6940875049587097631) 同步