PVE UPS NUT配置 自动关机

此文适合ups带usb端口,若是不带,参考下方项目
https://github.com/Twtcer/ups-safe-shutdown 原理是ping路由器,若是停电无法ping通则关闭服务器

环境#

  • PVE7
  • UPS为LADIS雷迪司H1000M后备带usb型号(大部分支持群晖nas的基本都可以使用)

原因&目标#

原本厂家是由配套的程序,功能也比较多,能够配置提醒(短信,邮件)、配置关机,但是试用后发现是java开发,启动后内存占用比较高。
后面就找到了NUT,群晖里面的应该也是基于此工具。
一般有2种方式实现自动关机:

  • PVE下安装黑群晖(dsm6版本),设置主机和开放从机,其他机器设置后可以联动信息关机。但是我黑群晖基本用centos8跑docker替代了大部分服务。所以就选择pve主机直接配置NUT
  • PVE安装NUT,配置webUI。

配置过程#

确定ups已经接入#

Copy
lsusb Bus 003 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 031: ID 0665:5161 Cypress Semiconductor USB to Serial Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 001 Device 031: ID 0665:5161 Cypress Semiconductor USB to Serial
即UPS接入的信息
一般有USP字样,如果没有看后面的提示

安装NUT#

Copy
apt update apt install nut nut-client nut-server nut-cgi

查看ups连接信息

Copy
nut-scanner -U SNMP library not found. SNMP search disabled. Neon library not found. XML search disabled. IPMI library not found. IPMI search disabled. Scanning USB bus. [nutdev1] driver = "blazer_usb" port = "auto" vendorid = "0665" productid = "5161" product = "USB to Serial" vendor = "INNO TECH" bus = "001"

or

Copy
/bin/upsc nutdev1@localhost Init SSL without certificate database battery.charge: 100 battery.voltage: 13.50 battery.voltage.high: 13.00 battery.voltage.low: 10.40 battery.voltage.nominal: 12.0 device.type: ups driver.name: blazer_usb driver.parameter.bus: 001 driver.parameter.pollinterval: 2 driver.parameter.port: auto driver.parameter.product: USB to Serial driver.parameter.productid: 5161 driver.parameter.synchronous: no driver.parameter.vendor: INNO TECH driver.parameter.vendorid: 0665 driver.version: 2.7.4 driver.version.internal: 0.12 input.current.nominal: 4.0 input.frequency: 50.0 input.frequency.nominal: 50 input.voltage: 222.3 input.voltage.fault: 222.3 input.voltage.nominal: 220 output.voltage: 222.3 ups.beeper.status: enabled ups.delay.shutdown: 30 ups.delay.start: 180 ups.load: 0 ups.productid: 5161 ups.status: OL ups.type: offline / line interactive ups.vendorid: 0665

下面将开始配置
未说明的配置字段,请先#注释,后面需要再配置即可

1.UPS配置 vim /etc/nut/ups.conf#

将上面获取到的配置信息拷贝到ups.conf

Copy
maxretry = 3 [nutdev1] driver = "blazer_usb" port = "auto" vendorid = "0665" productid = "5161" product = "USB to Serial" vendor = "INNO TECH" bus = "001"

2.配置监视配置 vim /etc/nut/upsmon.conf#

在配置文件最后面追加

Copy
RUN_AS_USER root MONITOR nutdev1@localhost 1 monuser secret master

3.配置upsd vim /etc/nut/upsd.conf#

修改服务监听端口,因为局域网多台设备都需要Server下发对应指令

Copy
#listen all interface LISTEN 0.0.0.0 3493

4.配置nut vim /etc/nut/nut.conf#

Copy
MODE=netserver

5.配置nut用户名,用于其他客户端连接 vim /etc/nut/upsd.users#

Copy
[monuser] password = secret upsmon master

6.重启以上服务#

Copy
service nut-server restart service nut-client restart systemctl restart nut-monitor upsdrvctl stop upsdrvctl start

or

Copy
service nut-server restart; \ service nut-client restart; \ systemctl restart nut-monitor; \ upsdrvctl stop; \ upsdrvctl start;

7.配置web界面 vim /etc/nut/hosts.conf#

Copy
MONITOR nutdev1@localhost "LADS H1000M 1000VA 600W UPS"

启用cgi支持,重启服务及配置

Copy
a2enmod cgi systemctl restart apache2 vim /etc/nut/upsset.conf

打开页面 http://ip/cgi-bin/nut/upsstats.cgi 查看
e.g. http://192.168.123.199/cgi-bin/nut/upsstats.cgi

image

至此,基本配置ok

8.配置关机脚本 vim /etc/nut/upssched.conf#

Copy
CMDSCRIPT /etc/nut/upssched-cmd #编写此脚本设置 PIPEFN /etc/nut/upssched.pipe LOCKFN /etc/nut/upssched.lock AT ONBATT * START-TIMER power-off 60 AT ONLINE * CANCEL-TIMER power-off AT ONLINE * EXECUTE power-on

/etc/nut/upssched-cmd

Copy
#!/bin/sh case $1 in onbatt) logger -t upssched-cmd "UPS running on battery" # do somethings ,e.g.send email \ wechat ;; 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

参考#

posted @   LandWind  阅读(11734)  评论(12编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示
CONTENTS