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

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

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

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

1. 连接 UPS 并确认通讯

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

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,找到 SHUTDOWNCMD 和 NOTIFYCMD 相关行:

# 将默认关机命令替换为我们的脚本
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的 POLLFREQ 和 BATTERYLEVEL 触发值,尽早执行关机。

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

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

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意