配置NUT的核心步骤包括:安装NUT软件包;识别UPS连接方式并配置ups.conf定义设备驱动与端口;设置upsd.conf指定监听地址;在upsd.users中创建认证用户;配置upsmon.conf定义监控关系、通知事件及关机脚本路径;编写具备日志记录、延迟执行和sudo权限的关机脚本;确保nut用户在sudoers中拥有无密码执行shutdown权限;最后启动nut-driver、nut-server和nut-monitor服务并设置开机自启,完成联动关机配置。

Linux系统与UPS设备配合实现断电保护的关机,核心在于利用UPS监控软件(如Network UPS Tools,简称NUT)感知市电状态变化。当市电中断或UPS电池电量达到预设阈值时,该软件会触发系统执行预定义的关机命令,确保在电池耗尽前,服务器能安全、有序地关闭,从而保护数据完整性,避免突发断电带来的硬件损伤和数据丢失。
要实现Linux与UPS的联动关机,最常见且可靠的方法是部署Network UPS Tools (NUT)。NUT是一个功能强大的客户端-服务器架构软件,它能与各种UPS设备通信,并提供统一的接口来监控UPS状态和在特定事件发生时执行操作。
具体配置步骤通常包括:
安装NUT: 在Linux服务器上安装NUT软件包。
# Debian/Ubuntu sudo apt update sudo apt install nut # CentOS/RHEL sudo yum install nut
识别UPS设备: 确定UPS与服务器的连接方式(USB、串口或网络)。USB连接通常是最常见的,NUT会自动加载相应的驱动。
配置ups.conf
/etc/nut/ups.conf
[myups]
driver = usbhid-ups
port = auto
desc = "My Home Server UPS"
# 更多选项如vendorid, productid可以在lsusb中找到保存后,可以尝试启动
upsd
upsc myups
sudo systemctl restart nut-driver sudo systemctl restart nut-server # 如果是服务器模式 upsc myups
如果能看到UPS状态信息,说明驱动和连接正常。
配置upsmon.conf
upsmon
/etc/nut/upsmon.conf
RUN_AS_USER nut MONITOR myups@localhost 1 upsmaster mypassword master # 当UPS切换到电池供电时(市电中断) NOTIFYCMD "/etc/nut/ups_shutdown.sh" NOTIFYFLAG ONBATT EXEC NOTIFYFLAG ONBATT SYSLOG # 当UPS电池电量低时 NOTIFYFLAG LOWBATT EXEC NOTIFYFLAG LOWBATT SYSLOG # 强制关机延迟,给系统留出足够时间执行关机脚本 FSD lowbatt 60 # 当LOWBATT事件发生后,60秒内未恢复市电则强制关机
这里的
upsmaster
mypassword
/etc/nut/upsd.users
创建关机脚本:
NOTIFYCMD
/etc/nut/ups_shutdown.sh
#!/bin/bash logger -t UPS_SHUTDOWN "UPS is on battery or low battery, initiating system shutdown." # 确保所有关键服务有时间优雅关闭 sleep 10 sudo shutdown -h now "UPS battery is low, system shutting down."
sudo chmod +x /etc/nut/ups_shutdown.sh
注意:
upsmon
nut
sudo
nut
/etc/sudoers
shutdown
# 编辑sudoers文件 sudo visudo # 添加一行 (注意:这允许nut用户无需密码执行shutdown,请谨慎评估安全风险) nut ALL=(ALL) NOPASSWD: /sbin/shutdown
启动NUT服务: 确保所有NUT服务都已启动并设置为开机自启。
sudo systemctl enable nut-driver nut-server nut-monitor sudo systemctl start nut-driver nut-server nut-monitor
完成这些步骤后,当UPS检测到市电中断或电池电量低时,
upsmon
ups_shutdown.sh
在我看来,配置NUT,尤其是初次接触时,最容易让人感到困惑的往往是其多文件、多服务的架构。理解每个文件的作用和它们之间的协作关系,是成功配置的关键。
ups.conf
driver
nut-driver-enumerator
apcsmart
usbhid-ups
port
port = auto
/dev/ttyS0
/dev/ttyUSB0
desc
vendorid
productid
lsusb -v
dmesg
upsd.conf
LISTEN
upsd
127.0.0.1
0.0.0.0
upsd.users
upsmaster
actions
set
monitor
monitor
upsmon.conf
monitor
myups@localhost
myups@远程UPS服务器IP
NOTIFYCMD
NOTIFYFLAG
NOTIFYCMD
ONBATT
LOWBATT
EXEC
SYSLOG
FSD
LOWBATT
FSD
upsmon
nut-driver
nut-server
nut-monitor
nut-driver
nut-server
upsd
nut-monitor
upsmon
确保Linux系统在UPS低电量时能自动且安全地关机,这不仅仅是执行一个
shutdown
首先,核心在于
upsmon.conf
LOWBATT
FSD
LOWBATT
LOWBATT
upsmon.conf
NOTIFYFLAG LOWBATT EXEC NOTIFYCMD "/etc/nut/ups_shutdown.sh"
这告诉
upsmon
LOWBATT
/etc/nut/ups_shutdown.sh
关机脚本的编写与权限: 我强烈建议关机脚本不仅仅包含
sudo shutdown -h now
logger
shutdown
sleep
shutdown
sudo systemctl stop postgresql
sudo shutdown -h now
sudo poweroff
nut
NOPASSWD
FSD
FSD lowbatt 60
这个参数意味着,在
LOWBATT
upsmon
upsmon
FSD
LOWBATT
持续监控与测试: 配置完成后,务必进行真实环境下的测试。模拟断电,观察系统日志,确认关机脚本是否被执行,系统是否在预期的时间内安全关闭。这能帮助你发现潜在的配置错误或权限问题。
在配置UPS自动关机时,虽然目标是保护系统,但如果不谨慎,反而可能引入新的风险。我个人在实践中也遇到过一些“坑”,总结了一些潜在风险和相应的最佳实践。
潜在风险:
NOTIFYFLAG ONBATT EXEC
nut
sudo shutdown
logger
shutdown
nut
FSD
FSD
FSD
upsmon
最佳实践:
彻底的测试与验证:
upsc
logger
优化关机脚本:
/usr/bin/logger
/sbin/shutdown
shutdown
systemctl stop <service>
ONBATT
LOWBATT
sleep
精确配置FSD
FSD
sudoers
nut
shutdown
shutdown
nut ALL=(ALL) NOPASSWD: /sbin/shutdown -h now
nut ALL=(ALL) NOPASSWD: ALL
定期维护与检查:
考虑多层保护:
通过遵循这些实践,可以大大降低自动关机配置带来的风险,确保在电力故障时,你的Linux系统能够得到最可靠的保护。
以上就是Linux关机命令如何与UPS设备配合?实现断电保护的关机命令配置方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号