UPS断电自动备份关机脚本保护住宅服务器

为什么你的住宅服务器需要 UPS 自动关机脚本

住宅服务器(如自建NAS、家庭网关)经常7x24小时运行,一旦发生意外断电,磁盘缓存里的数据来不及写入就可能损坏文件系统。
给UPS配上自动备份关机脚本,能在断电后争取几十秒时间执行关键数据备份,然后干净地关闭系统,保护硬盘和数据安全。
本文基于NUT(Network UPS Tools)实现,适合大多数支持USB通讯的家用UPS。

准备工作:硬件连接与 NUT 安装

1. 连接 UPS 并确认通讯

将UPS通过USB线连接到服务器,登录系统后执行 lsusb 查看是否识别到UPS设备。
如果看到类似 American Power ConversionCyberPower 的条目说明连接正常。

2. 安装 NUT 软件

sudo apt update
sudo apt install nut nut-client nut-server

安装完成后会进入配置向导,选择“单机模式(local only)”,后续再手动调整配置文件。

编写自动化备份与关机脚本

创建两个脚本:一个只做备份,一个用于NUT触发时调用(先备份再关机)。

步骤一:创建备份脚本

sudo nano /usr/local/bin/backup-before-shutdown.sh

写入以下内容(以备份 /home/var/lib/mysql 为例):

#!/bin/bash
# 备份到 /data/backup,可根据需要修改
tar -czf /data/backup/home-$(date +%Y%m%d%H%M).tar.gz /home
tar -czf /data/backup/mysql-$(date +%Y%m%d%H%M).tar.gz /var/lib/mysql

保存后赋予执行权限:

sudo chmod +x /usr/local/bin/backup-before-shutdown.sh

步骤二:创建NUT事件触发脚本

NUT在UPS进入电池模式后会调用指定脚本。
创建 /usr/local/bin/ups-shutdown.sh

#!/bin/bash
# 先执行备份
/usr/local/bin/backup-before-shutdown.sh
# 等待10秒确保备份完成
sleep 10
# 执行关机(需sudo权限)
/sbin/shutdown -h now

同样赋权:

sudo chmod +x /usr/local/bin/ups-shutdown.sh

配置 NUT 事件响应

编辑NUT主配置文件 /etc/nut/upsmon.conf,找到 SHUTDOWNCMDNOTIFYCMD 相关行:

# 将默认关机命令替换为我们的脚本
SHUTDOWNCMD "/usr/local/bin/ups-shutdown.sh"
# 设置当UPS进入电池模式时执行自定义脚本
NOTIFYCMD /usr/local/bin/ups-shutdown.sh
# 确保以下通知类型触发脚本
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC

重启NUT服务生效:

sudo systemctl restart nut-server nut-monitor

如果使用apcupsd等其他软件,可参考对应文档,但原理一致——将UPS断电事件与自定义备份关机脚本绑定。

测试与验证断电保护是否生效

不要直接拔电测试,建议先模拟:

  1. 查看UPS状态:upsc ups(需根据配置替换UPS名称,通常为ups)。
  2. 手动将UPS切换为电池模式(部分UPS支持通过软件模拟)。
  3. 确认日志中出现 UPS on battery 且脚本被执行:
journalctl -u nut-monitor -f

看到类似 Executing command: /usr/local/bin/ups-shutdown.sh 即成功。

如果你愿意冒一点风险,可以拔掉UPS电源线观察服务器是否在60秒(NUT默认延迟)后自动备份并关机。
重新上电后检查备份文件是否生成。

常见问题与避坑指南

Q:UPS通讯不上,upsc显示无数据?
A:检查USB线,尝试更换USB口;查看 /etc/nut/ups.conf 中驱动和USB设备ID是否正确,常见驱动 usbhid-ups

Q:脚本执行了但没备份成功?
A:确认备份脚本中的目标目录存在且有写入权限。可在脚本开头加入 mkdir -p /data/backup 确保目录存在。

Q:NUT服务启动失败?
A:运行 sudo nut-scanner 生成正确配置,复制到 /etc/nut/ups.conf,并将 MODE=netserver 改为 MODE=standalone(单机模式)。

避坑提醒

  • 脚本中的关机命令需要root权限,务必在 /etc/sudoers 中允许NUT用户无密码执行 shutdown(或直接使用root运行NUT服务)。
  • 测试时先关闭重要写入任务,避免意外中断。
  • 如果UPS容量较小,建议缩短NUT的 POLLFREQBATTERYLEVEL 触发值,尽早执行关机。

完成以上配置后,你的住宅服务器就具备断电自动备份关机能力了。
日常保持UPS电池健康,再也不用担心突然停电导致数据丢失。

分享到:
上一篇
精细化Nginx缓存规则配置海外站点访问:海外站点加速
下一篇
容器隔离多站点彻底规避跨境平台关联风控
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意