如何设置家用威联通 NAS UPS 断电后自动关机并通知其他设备?

devtools/2025/3/31 22:42:52/

场景

📝备注:

求轻喷, 求放过. 😅

我真的是个理线方面的白痴. 这已经是我的极限了. 😂

我的家庭实验室 Homelab 服务器集群配置如下.

HomeLab 上半部分

HomeLab 下半部分

上半部分之前已经介绍过了, 这里就不再赘述了. 今天重点介绍介绍 UPS 和 NAS 部分.

  • 1台 UPS, 型号为 APC Back-UPS 650. 插座插着: NAS 和 插线板(插线板上连了4个 N100小主机和其他; 通过数据端口和 NAS 连接). 如下图: (求轻喷, 求放过. 😅)

    UPS

  • 1 台威联通 QNAP TS-453Bmini NAS. 如下图: (求轻喷, 求放过. 😅)

    QNAP NAS

现在的需求是:

  1. UPS 断电后一段时间(如 5min 后), NAS 自动断电;
  2. NAS 作为 UPS Server 运行, UPS 断电后, 通知其他 4 台 N100 小主机
  3. 4 台 N100 小主机收到通知后, 也过一段时间(如 5min 后)自动断电.

具体实现概述如下:

  1. 物理层面: UPS 通过数据线连接到 NAS USB
  2. 软件层面:
    1. NAS: 通过 UI 配置断电后操作;
    2. NAS: 通过 UI 启用 UPS Server 配置;
    3. N100 小主机: UPS Client 配置.

细节步骤如下:

实战

1. 物理层面: UPS 通过数据线连接到 NAS USB

这里我就不放图了, 因为就在上面那一堆线里面… 这个机柜在墙角, 我左跪右跪看了一圈也没找到能拍清楚的角度… 😅

APC UPS 自带一根数据线, 具体操作如下:

使用 USB 缆线将 Back-UPS 连接到 NAS。将一端插到 Back-UPS 后面板上的 POWERCHUTE 端口,另一端插到计算机上的 USB 端口。

就是下图的 ⑥:

APC 示意图

完成.

验证

完成后, 我们可以访问 威联通 QNAP QTS 界面, 会看到 UPS 的相关信息, 具体如下:

QTS 外部设备

QTS UPS 信息

接下来进入软件层面操作.

2. NAS: 通过 UI 配置断电后的操作

具体如下:

QNAP QTS UPS 设置界面

  1. 进入 威联通 QNAP QTS 界面;
  2. 访问 控制台 -> 系统 -> 外界设备 -> UPS
  3. 选择 USB 连接 -> 当电源失效时, 10 分钟后进入自动保护模式. (当然, 你可以选择另一选项, 即: 关闭 NAS)

如果你只需要 UPS 和 NAS 联动, 那么到这里就配置完成了.

3. NAS: 通过 UI 启用 UPS Server 配置

如果你还需要和其他主机/服务器联动, 那么需要通过 UI 启用 UPS Server 配置, 具体如上图 ⑥:

  1. 启用 网络不间断电源服务器(即 UPS Server)
  2. 并添加 4 台 N100 小主机的 IP 地址. 如: 192.168.3.154

完成.

额外说明

威联通 QNAP QTS 在后台, 实际上运行的是: upsd 服务, 监听了 3493 端口. 如下:

[admin@NAS33657A ups]# netstat -tuln | grep 3493
tcp        0      0 0.0.0.0:3493            0.0.0.0:*               LISTEN      
[admin@NAS33657A ups]# ps -ef|grep ups6960 admin       996 S   grep ups
14369 admin      1764 R   /usr/local/ups/bin/usbhid-ups -a qnapups -u admin
15999 admin      1536 S   /usr/sbin/upsd -u admin
23676 admin      8548 S   /usr/sbin/upsutil

这里我们需要知道的是:

  1. QNAP UPS Server 的 名称是:qnapups

威联通 QNAP QTS 的 UPS 配置, 具体位于 /etc/config/ups/ 目录下, 如下:

[admin@NAS33657A ups]# ls
ups.conf  upsd.conf  upsdrv.map  upsd.users  upsmon.conf[admin@NAS33657A ups]# cat upsd.users
[admin]password = 123456allowfrom = localhostactions = SETinstcmds = ALLupsmon master           # or upsmon slave

这里我们需要知道的是:

  1. QNAP UPS Server 的用户是:admin
  2. 密码是: 123456

总结一下, 威联通 QNAP QTS Server 信息:

  1. 实际上运行的是: upsd 服务
  2. 监听了 3493 端口
  3. UPS Server 的 名称是:qnapups (🐾 注意: 在威联通所有 NAS 上, 这个名字都是固定的)
  4. 用户是:admin
  5. 密码是: 123456

后面 N100 配置 UPS Client 需要用到这些信息.

4. N100 小主机: UPS Client 配置

我的 N100 小主机是 Ubuntu 24.04, 要在 Linux 系统上实现与 UPS(不间断电源)服务器的交互,并在断电 5 分钟后自动关机,通常需要使用 UPS 监控软件。常见的工具是 NUT(Network UPS Tools),它是一个开源的 UPS 监控和管理工具。

既然已经在 NAS 上运行了 upsd,并且 UPS 是 APC Back-UPS 650 通过 USB 连接到 NAS,那么在小主机上,可以通过配置 NUT 客户端(upsmon)来与 NAS 上的 upsd 交互,并实现断电 5 分钟后关机。

以下是详细的步骤:

4.1. 在 Linux 设备上安装 NUT 客户端

在需要监控 UPS 的 Linux 设备上,安装 NUT 客户端工具:

  • 对于基于 Debian/Ubuntu 的系统:

    sudo apt-get update
    sudo apt-get install nut-client
    
  • 如果你是基于 Red Hat/CentOS 的系统:

    sudo yum install nut-client
    
4.2. 配置 NUT 客户端

在 Linux 设备上,编辑 NUT 客户端的配置文件 /etc/nut/upsmon.conf,添加以下内容:

MONITOR qnapups@nas_ip 1 admin 123456 slave
  • qnapups:这是 QNAP NAS 上 UPS 的名称(🐾 注意: 在威联通所有 NAS 上, 这个名字都是固定的)。
  • nas_ip:NAS 的 IP 地址。
  • admin:NAS 上定义的用户名。
  • 123456:NAS 上定义的密码。
  • slave:表示这台设备是客户端,不是主控设备。
4.3. 设置断电后关机

/etc/nut/upsmon.conf 中,添加以下行以设置断电 5 分钟后关机:

SHUTDOWNCMD "/sbin/shutdown -h +5"
4.4. 设置 NUT 运行模式

/etc/nut/nut.conf 中, 有 4 种运行模式, 分别为:

  1. none: NUT 没有配置,或者使用集成电源管理,或者使用一些外部系统来启动 NUT 组件. 因此,不需要由 NUT 软件包捆绑的脚本或服务启动任何内容。
  2. standalone: 这种模式只针对本地配置,由 1 个 UPS 保护本地系统。这意味着要启动 3 个 NUT 层(驱动程序、upsdupsmon)及相应的配置文件。这种模式还可以处理 UPS 冗余。
  3. netserver: 与独立配置相同,但还需要一些额外的网络访问控制(防火墙、tcp包装器)以及在 upsd.conf 中可能需要一个特定的 LISTEN 指令。由于此模式对网络开放,因此应特别关注安全问题。 – 很明显, NAS UPS Server 是这种模式.
  4. netclient: 这种模式只要求upsmon(以及它可能使用的工具,如upssched或自定义脚本)来监视远程NUT服务器,并可能关闭此系统(在这种情况下,upsmon的一部分必须以root身份运行)。-- 很明显, 我们需要设置 Linux 设备为此模式.

调整 mode 配置为:

MODE=netclient
4.4. 启动 NUT 客户端服务

启动 upsmon 服务并设置为开机自启:

  • 对于基于 systemd 的系统:

    sudo systemctl start nut-client
    sudo systemctl enable nut-client
    
  • 对于基于 SysVinit 的系统:

    sudo service nut-client start
    sudo update-rc.d nut-client defaults
    

查看启动状态:

4.4.1 报错修复

这里第一次启动后报了1个错误, 具体如下:

  1. Failed to open '/usr/lib/tmpfiles.d/nut-common-tmpfiles.conf': No such file or directory
sudo systemctl status nut-client.service
○ nut-monitor.service - Network UPS Tools - power device monitor and shutdown controllerLoaded: loaded (/usr/lib/systemd/system/nut-monitor.service; enabled; preset: enabled)Active: inactive (dead) since Sat 2025-03-22 17:12:20 CST; 8s agoDuration: 5msProcess: 347996 ExecStartPre=/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/nut-common-tmpfiles.conf (code=exited, status=1/FAILURE)Process: 347998 ExecStart=/sbin/upsmon -F (code=exited, status=0/SUCCESS)Main PID: 347998 (code=exited, status=0/SUCCESS)CPU: 15msMar 22 17:12:20 n100-jumper-2 systemd[1]: Starting nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller...
Mar 22 17:12:20 n100-jumper-2 systemd-tmpfiles[347996]: Failed to open '/usr/lib/tmpfiles.d/nut-common-tmpfiles.conf': No such file or directory
Mar 22 17:12:20 n100-jumper-2 systemd[1]: Started nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller.
Mar 22 17:12:20 n100-jumper-2 nut-monitor[347998]: upsmon disabled, please adjust the configuration to your needs
Mar 22 17:12:20 n100-jumper-2 nut-monitor[347998]: Then set MODE to a suitable value in /etc/nut/nut.conf to enable it
Mar 22 17:12:20 n100-jumper-2 systemd[1]: nut-monitor.service: Deactivated successfully.

所以执行如下命令修复:

sudo touch /usr/lib/tmpfiles.d/nut-common-tmpfiles.conf

启动后再次运行, 没有报错:

sudo systemctl status nut-client.service 
● nut-monitor.service - Network UPS Tools - power device monitor and shutdown controllerLoaded: loaded (/usr/lib/systemd/system/nut-monitor.service; enabled; preset: enabled)Active: active (running) since Sat 2025-03-22 17:15:21 CST; 2s agoProcess: 350296 ExecStartPre=/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/nut-common-tmpfiles.conf (code=exited, status=0/SUCCESS)Main PID: 350298 (upsmon)Tasks: 2 (limit: 18754)Memory: 3.6M (peak: 3.8M)CPU: 22msCGroup: /system.slice/nut-monitor.service├─350298 /lib/nut/upsmon -F└─350310 /lib/nut/upsmon -FMar 22 17:15:21 n100-jumper-2 systemd[1]: Starting nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller...
Mar 22 17:15:21 n100-jumper-2 systemd[1]: Started nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller.
Mar 22 17:15:21 n100-jumper-2 nut-monitor[350298]: fopen /run/nut/upsmon.pid: No such file or directory
Mar 22 17:15:21 n100-jumper-2 nut-monitor[350298]: Could not find PID file to see if previous upsmon instance is already running!
Mar 22 17:15:21 n100-jumper-2 nut-monitor[350298]: Using power down flag file /etc/killpower
Mar 22 17:15:21 n100-jumper-2 nut-monitor[350298]: UPS: qnapups@192.168.3.216 (secondary) (power value 1)
Mar 22 17:15:21 n100-jumper-2 nut-monitor[350310]: Init SSL without certificate database
4.5. 测试配置
4.5.1 检查 UPS 状态

在 Linux 设备上,使用以下命令检查是否能够正确获取 UPS 状态:

❯ upsc qnapups@192.168.3.216
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 50
battery.date: not set
battery.mfr.date: 2019/12/10
battery.runtime: 1140
battery.runtime.low: 120
battery.type: PbAc
battery.voltage: 13.7
battery.voltage.nominal: 12.0
device.mfr: APC
device.model: Back-UPS 650
device.serial: 3B1950X62634  
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ttyS1
driver.parameter.synchronous: no
driver.version: 2.7.4
driver.version.data: APC HID 0.96
driver.version.internal: 0.41
input.sensitivity: low
input.transfer.high: 266
input.transfer.low: 165
input.transfer.reason: input voltage out of range
input.voltage: 226.0
input.voltage.nominal: 220
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.firmware: 822.A3.I
ups.firmware.aux: A3
ups.load: 38
ups.mfr: APC
ups.mfr.date: 2019/12/10
ups.model: Back-UPS 650
ups.productid: 0002
ups.serial: 3B1950X62634  
ups.status: OL
ups.timer.reboot: 0
ups.timer.shutdown: -1
ups.vendorid: 051d

如果配置正确,你应该能够看到 UPS 的详细信息,例如电池状态、输入电压等。

4.5.2 模拟断电测试

你可以通过断开 UPS 的电源来测试配置是否正确。如果一切正常,Linux 设备应该在断电 5 分钟后自动关机。

全部完成! 🎉🎉🎉


5. 其他注意事项

  • 防火墙配置:确保 NAS 的防火墙允许来自 Linux 设备的 3493 端口的连接。
  • 权限问题:如果你是其他 NAS, 需要确保 NAS 上的 upsd.users 文件中定义的权限允许客户端设备访问 UPS 信息。
  • 时间同步:确保 NAS 和 Linux 设备的时间同步,以避免因时间差异导致的监控问题。

总结

通过以上步骤,你应该能够实现:

当 UPS 断电后:

  1. NAS 自动关机
  2. 其他 Linux 设备 自动关机

🎉🎉🎉


http://www.ppmy.cn/devtools/170595.html

相关文章

windows下安装并使用node.js

一、下载Node.js 选择对应你系统的Node.js版本下载 Node.js官网下载地址 Node.js中文网下载地址??? 这里我选择的是Windows64位系统的Node.js20.18.0(LTS长期支持版本)版本的.msi安装包程序 官网下载: 中文网下载: 二、安…

【Uniapp】关于核心页面生命周期流程详解

UniApp 的页面生命周期继承自 Vue 组件生命周期,本文将解析核心页面生命周期流程,介绍对应的触发时机、作用并给出示例。 页面生命周期触发顺序 onLoad → onShow → onReady → onHide → onUnload 各个页面生命周期介绍 一、onLoad 触发时机&…

【MySQL】事务

目录 基本概念事务操作自动提交事务开启事务提交事务回滚事务代码示例 事务的特性 ACID事务的隔离级别读未提交 read uncommitted读已提交 read committed可重复读 repeatable read序列化(串行) serializable操作示例 基本概念 在 MySQL 中的事务&#…

SQL 通配符

SQL 通配符 在SQL查询中,通配符是一种非常有用的特性,它允许用户在查询时使用特殊字符来匹配一系列的值。本文将详细介绍SQL中的通配符及其用法,帮助读者更好地理解如何在SQL查询中使用通配符。 1. 什么是通配符? 通配符是SQL查…

PRODIGY: “不折腾人”的蛋白-蛋白/蛋白-小分子结合能计算工具

PRODIGY(全称为 PROtein binDIng enerGY prediction)是一种蛋白质结合能预测工具,可利用蛋白质-蛋白质复合物的三维结构来预测其结合亲和力。PRODIGY 利用一种高效的基于接触的方法,在估计结合自由能和解离常数的同时,…

建筑安全员考试:“高效记忆” 关键词引领的学习捷径

建筑安全员考试需要记忆大量的知识点,如何高效记忆成为考生关注的焦点。运用 “高效记忆” 相关关键词,能帮助考生找到学习的捷径。​ 利用 “口诀记忆法” 关键词,将复杂的知识点编成口诀。例如,在记忆安全色与安全标志时&#…

使用 ncurses 库创建文本用户界面:基础函数详解

简介 ncurses 是一个功能强大的库,用于在 Unix-like 系统中创建文本用户界面。它提供了丰富的函数来控制屏幕上的文本显示、处理键盘输入、绘制图形元素等。本文将详细介绍 ncurses 库中的一些基础函数,包括 printw、wrefresh、获取用户信息、键盘输入、…

ubuntu桌面图标异常——主目录下的所有文件(如文档、下载等)全部显示在桌面

ubuntu桌面图标异常 问题现象问题根源系统级解决方案方法一:全局修改(推荐多用户环境)方法二:单用户修改(推荐个人环境)操作验证与调试避坑指南扩展知识参考文档问题现象 主目录文件异常显示 用户主目录(如/home/user/)下的所有文件(如文档、下载等)全部显示在桌面,…