依琳开发笔记 依琳开发笔记
依琳开发笔记

使用绿联NAS作为NUT服务器,实现断电后在局域网其他设备能够正常关机

一、前因:

因为最近购入了一台工控机想要实现断电后由UPS撑一段时间,然后安全关机。 由于唯一一个UPS通信口插在了绿联NAS上,因此使用绿联自带的NUT服务实现,PVE主机和绿联NAS都插在UPS上。

二、设备列表

UPS:任意支持识别的UPS,我这里是硕天的UT659EGC 绿联NAS:作为NUT服务端(Master),通过USB连接UPS,对外提供UPS状态信息 PVE主机:作为NUT客户端(Slave),接收NAS的UPS信号,当市电中断且超过设定延迟后自动安全关机

三、需要满足的条件:

1、绿联NAS需要连接UPS并启用NUT Server 2、其他主机需要和NAS一个局域网内,并在BIOS中开启来电自启 3、PVE或其他Linux系统需要安装提前安装好nut包

四、安装NUT包:

1、使用任意SSH连接工具连接至你的PVE主机 2、先在控制台输入以下内容更新软件:

apt update

3、在输入以下内容安装nut包:

apt install nut

4、安装完成nut

五、在PVE端进行配置:

1、使用SSH连接到PVE(我这里使用FinalShell) FinalShell

2、打开/etc/nut/nut.conf文件(默认安装完打开全部为英文,直接删除里面全部内容,复制以下内容进去)

# ========== 基本设置 ==========
RUN_AS_USER root

# ========== 监控目标(UPS名称、IP、用户名、密码、角色) ==========
MONITOR ups0@192.168.30.125 1 nut nut secondary #把@后面的IP地址改成你绿联NAS的内网IP地址

# ========== 触发条件 ==========
MINSUPPLIES 1

# ========== 关机命令(作为最终回退,但 upssched 会接管) ==========
SHUTDOWNCMD "/sbin/shutdown -h +0"
#SHUTDOWNCMD "/usr/bin/logger 'UPS shutdown triggered'"#测试使用

# ========== 启用 upssched 作为通知处理器 ==========
NOTIFYCMD /usr/sbin/upssched

# ========== 通知事件标志(告诉 upsmon 哪些事件需要执行 NOTIFYCMD) ==========
NOTIFYFLAG ONBATT   SYSLOG+WALL+EXEC
NOTIFYFLAG ONLINE   SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT  SYSLOG+WALL+EXEC

# ========== 其他常规参数 ==========
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

# ========== 最终延迟(留给 upssched 处理,这里设小一点) ==========
FINALDELAY 5

3、配置定时任务,打开/etc/nut/upssched.conf(默认安装完打开全部为英文,直接删除里面全部内容,复制以下内容进去)

# 执行脚本路径
CMDSCRIPT /usr/bin/upssched-cmd

# 管道和锁文件(确保 /run/nut 目录存在且权限正确)
PIPEFN /run/nut/upssched.pipe
LOCKFN /run/nut/upssched.lock

# 定义计时器规则
# 当 UPS 切换到电池时,启动一个名为 "shutdown-timer" 的计时器,延迟 240 秒后触发
AT ONBATT * START-TIMER shutdown-timer 240

# 如果电力恢复,取消该计时器
AT ONLINE * CANCEL-TIMER shutdown-timer

# 如果低电量(电池即将耗尽),立即执行关机,不等待
AT LOWBATT * EXECUTE shutdown-timer
4、创建关机执行脚本,打开/bin/upssched-cmd(默认安装完打开全部为英文,直接删除里面全部内容,复制以下内容进去)
#!/bin/sh

case "$1" in
    shutdown-timer)
        logger -t upssched-cmd "UPS on battery for too long, shutting down PVE now."
        /sbin/shutdown -h +0 "PVE: UPS battery critical, shutting down."
        ;;
    *)
        logger -t upssched-cmd "Received unknown event: $1"
        exit 1
        ;;
esac

5、依次在控制台输入以下命令赋予执行权限(以防万一)

chmod +x /usr/bin/upssched-cmd

mkdir -p /run/nut

chown root:nut /run/nut 2>/dev/null || chown root:root /run/nut

chmod 775 /run/nut

6、启动服务并设置开机自启(依次执行以下命令)

systemctl enable nut-monitor
systemctl start nut-monitor

5、然后你可以拔掉UPS的电源,看看控制台会不会弹出:

Broadcast message from root@pve (somewhere) (Sun Jun 28 15:54:12 2026):        

UPS ups0@192.168.30.125 on battery

6、在插上UPS电源又会弹出:

Broadcast message from root@pve (somewhere) (Sun Jun 28 15:54:22 2026):        

UPS ups0@192.168.30.125 on line power

最后,恭喜你,按照这个步骤一般都能成功,现在已经可以实现断电后其他设备自动安全关机了 (建议还是真实断电模拟一下,请确保NAS和PVE主机在nut服务操作下都正常关机后(也就是直接拔下UPS电源正常走流程自动关机,看看PVE主机是否能自动关机)。要在UPS指示灯也熄灭的情况下(我这台UPS是这样)在插入UPS电源,一般就会自动开机了。)。

暂无评论

还没有评论,来说点什么吧

发表评论

© 2026 Yi-Zero All rights reserved.
蜀ICP备2026032916号