varkai

此心不动,随机而动。

Linux 下使用 NUT 实现断电自动关机

2020.05.28 运维

前言

在前面 《群晖和UPS的联姻》 中,我们完成了群晖连接 UPS 并实现了断电自动关机,同时也启用了网络 UPS 服务器,但这也只限于和 UPS 直接连接的群晖,其他局域网中的服务器还无法监控 UPS 的状态,前面提到,服务器上安装 NUT 客户端软件就能实现,所以这一回主要讲解如何在 Linux 系统下安装 NUT 客户端软件并实现断电自动关机。

我这里使用的 Linux 发行版是 Ubuntu server 20.04 LTS,所以 Debian 系的发行版安装配置都是一样的,其他的发行版操作大同小异。

准备工作

首先我们需要先进到群晖 WEB 后台,依次打开 控制面板 - 硬件和电源,切换到 不断电系统 选项卡,找到 启用网络 UPS 服务器,确保已经勾选,接着点击下方的 允许的 DiskStation 设备, 这时会弹出一个输入 IP 的对话框,这里填写的 IP 地址是局域网其他需要网络监控 UPS 状态的服务器 IP 地址,只有在这里列出的 IP 地址所对应的服务器才能实现网络监控,这里最多支持5台服务器,我这里 Ubuntu server 的 IP 是 192.168.98.210,我们把它填进去后点击确认就行了。

安装 NUT 客户端

NUT 提供了源码,我们可以直接源码编译安装,但太麻烦了,而且基本上各大发行版的软件仓库都有现成的包,所以我们直接用 apt 安装就行了。

$ sudo apt install nut-client

安装好后,我们可以检查下是否安装成功,在终端执行 upsc [email protected] 后,如果能够显示网络 UPS 的详细信息则代表安装成功了,其中 192.168.99.10 是网络 UPS 服务器的 IP 地址,在这里也就是群晖的 IP 地址。

$ upsc [email protected]
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 50
battery.date: 2001/09/25
battery.mfr.date: 2020/02/07
battery.runtime: 1600
battery.runtime.low: 120
battery.type: PbAc
battery.voltage: 13.6
battery.voltage.nominal: 12.0
device.mfr: American Power Conversion
device.model: Back-UPS RS 550G
device.serial: 4B2006P24872  
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 5
driver.parameter.port: auto
driver.version: DSM6-2-25364-191230
driver.version.data: APC HID 0.95
driver.version.internal: 0.38
input.sensitivity: medium
input.transfer.high: 282
input.transfer.low: 176
input.voltage: 221.0
input.voltage.nominal: 230
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.firmware: 857.L7 .I
ups.firmware.aux: L7  
ups.load: 19
ups.mfr: American Power Conversion
ups.mfr.date: 2020/02/07
ups.model: Back-UPS RS 550G
ups.productid: 0002
ups.realpower.nominal: 330
ups.serial: 4B2006P24872  
ups.status: OL
ups.test.result: No test initiated
ups.timer.reboot: 0
ups.timer.shutdown: -1
ups.vendorid: 051d

配置 NUT 客户端

NUT 安装成功之后,还需要一些基本的配置,才能实现网络监控,NUT 的配置文件在 /etc/nut 目录下。

首先我们找到 nut.conf 文件,将文件中的 MODE=none 修改为 MODE=netclient, 让 NUT 运行在 UPS 客户端模式。

$ sudo sed -i "s/^MODE=.*/MODE=netclient/g" /etc/nut/nut.conf

然后在找到 upsmon.conf 文件,添加监听的 UPS 服务器信息,具体格式如下,一般情况下,我们只需要把 IP 地址修改为自己的 UPS 服务器地址即可,其他默认即可,另外该配置文件中还有一些其他参数,如果没有什么特殊要求,也保持默认即可,如有需要,也可自行去研究各参数的含义,这里就不再赘述了。

# 首先把可能存在的默认配置注释掉,否则会导致 nut-client 服务启动失败
$ sudo sed -i "s/^MONITOR[ \t]*/#MONITOR /g" /etc/nut/upsmon.conf

# 设置 NUT 监听的服务器信息
# 格式:MONITOR ups@{UPS 服务器地址} {可用 UPS 数量} {用户名} {密码} {设备模式}
# 例子:MONITOR [email protected] 1 monuser secret slave
$ sudo sed -i '$a\MONITOR [email protected] 1 monuser secret slave' /etc/nut/upsmon.conf

全部配置好后,最后启动 nut-client 服务,并设置为开机自动启动服务。

# 启动 nut-client 服务
$ sudo systemctl start nut-client
# 设置开机自启动
$ sudo systemctl enable nut-client

结语

到这里,我们就已经完成了局域网 Linux 服务器监控网络 UPS 服务器状态和断电自动关机,下一回将讲解 VMware ESXi 如何通过 NUT 监控网络 UPS实现断电关机。。。😴