正如任何真正的IT极客都会同意的,UPS设备不仅在数据中心是关键设备,在家里也是如此。然而,大多数家庭用户无法获得一个巨大的10+ 千伏安 UPS,能够保护我们各种“个人设备”所连接的所有电路;相反,大多数家庭/小型办公室的UPS安装通常是一些小的桌面设备,通常容量在3kVA以下。在这种情况下,这些较小的设备通常分配给单个设备/区域,并且通常仅负责向一个设备发送 incoming utility power 的状态信号。
使用多个UPS设备为同一“工作区”的不同组件供电怎么样?或者在多个位置(因此每个位置都有自己的电池备用)都有接入点和交换机的家庭网络?如何监控多个分布式的电池备用装置(假定每个UPS装置只有USB连接)?
APC不间断电源
输入 apcupsd: “一个用于控制APC不间断电源的守护进程。” 不幸的是,该工具标语的复数形式表明它支持广泛的设备种类,而不是多个同时连接的设备。 截至目前,我发现了一篇文章描述了如何配置 apcupsd 以支持 多个 USB连接的UPS设备,但这真的不是很好看。 这个过程的大致内容如下:
- 配置udev规则以确保通过UPS序列号一致地映射到命名挂载点
- 为每个连接的UPS创建多个apcupsd配置文件
- 为每个UPS创建新的“动作”和“控制”脚本
- 重新配置 apcupsd init.d/系统脚本以启动多个守护进程实例(每个UPS一个)
我通常不喜欢在难以找到的位置创建大型“自定义”配置文件,并且与分发的软件包有很大的差异,因此这个过程对我来说有点“ hackey ”;特别是因为所有这些配置文件的最终结果是为了为每个UPS监控创建“隔离进程”。
将APCUPSD容器化
到目前为止,我决定采取一种不同的方法来隔离每个apcupsd进程:一种具有更高可发现性、版本控制潜力和可扩展性的方法。Docker。
我决定按照Debian Wiki上apcupsd指南中的第一步来操作(创建udev规则以确保物理设备在启动/连接时获得持久路径)。UPS设备通常安装在/dev/usb/hiddev*,所以我们应该确认我们有几个设备:
# ls /dev/usb hiddev0 hiddev1 # lsusb Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power Supply Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power Supply Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
太好了!我们得到了一些看起来像 UPS 设备的 在 /dev/usb/hiddev0 和 /dev/usb/hiddev1 上的东西。 现在来获取序列号:
# udevadm info --attribute-walk --name=/dev/usb/hiddev0 | egrep 'manufacturer|product|serial'
ATTRS{manufacturer}=="American Power Conversion"
ATTRS{product}=="Back-UPS BX1500G FW:866.L5 .D USB FW:L5 "
ATTRS{serial}=="8975309"
ATTRS{manufacturer}=="Linux 4.4.0-170-generic ohci_hcd"
ATTRS{product}=="OHCI PCI host controller"
ATTRS{serial}=="0000:00:02.0"
# udevadm info --attribute-walk --name=/dev/usb/hiddev1 | egrep 'manufacturer|product|serial'
ATTRS{manufacturer}=="American Power Conversion"
ATTRS{product}=="Back-UPS NS 1100M2 FW:953.e3 .D USB FW:e3 "
ATTRS{serial}=="8675310"
ATTRS{manufacturer}=="Linux 4.4.0-170-generic ohci_hcd"
ATTRS{product}=="OHCI PCI host controller"
ATTRS{serial}=="0000:00:04.0"
已知的序列号,我们创建udev规则,将这些设备持久化到已知的映射点:
## FILE AT /lib/udev/rules.d/ups.rules
# SCREEN UPS
KERNEL=="hiddev*", ATTRS{manufacturer}=="American Power Conversion", ATTRS{serial}=="8975309", OWNER="root", SYMLINK+="usb/ups-screen"
# ComputeAndNetwork UPS
KERNEL=="hiddev*", ATTRS{manufacturer}=="American Power Conversion", ATTRS{serial}=="8675310", OWNER="root", SYMLINK+="usb/ups-compute-and-network"
现在重新运行udev规则:
udevadm trigger --verbose --sysname-match=hiddev*
现在,我们应该有一些“命名优美”的UPS USB设备:
# ls -la /dev/usb total 0 drwxr-xr-x 2 root root 120 Dec 18 19:55 . drwxr-xr-x 22 root root 4280 Dec 18 19:55 .. crwxrwxrwx 1 root root 180, 0 Dec 18 19:55 hiddev0 crwxrwxrwx 1 root root 180, 1 Dec 18 19:55 hiddev1 lrwxrwxrwx 1 root root 7 Dec 18 19:55 ups-compute-and-network -> hiddev1 lrwxrwxrwx 1 root root 7 Dec 18 19:55 ups-screen -> hiddev0
太棒了! 现在,每当这些设备被插入/拔出时,我们不需要再猜测哪个是 hiddev0,哪个是 hiddev1,因为 udev 会自动为我们提供 命名的挂载点 ,这对接下来的步骤至关重要
接下来,我创建了一个docker-compose文件,包含三个我决定为这个设置需要的“服务”:
- APCUPSD 用于“屏幕”不间断电源
- APCUPSD 用于“计算和网络”不间断电源
- Apache/Multimon 提供基于HTTP的接口
这个docker-compose文件还包含指向特定Dockerfiles以实际上为每个服务构建图像(提示:两个apcupsd服务使用相同的容器但有不同的配置)。
apcupsd容器只是最新的Alpine linux镜像;apcupsd来自apk仓库和一个非常轻量级 的apcupsd配置文件(配置为仅监控 – 后面会详细说明)/dev/ups
这个multimon容器使用最新的Apache/alpine镜像,并添加了apcupsd-webif来自 apk 仓库以及一些配置文件用于multimon。 此外,我编写了一个entrypoint.sh脚本来解析环境变量并生成一个配置文件用于multimon,这样可以在docker-compose文件中设置显示在网页界面上的UPS。
现在我们已经介绍了构建过程,让我们把docker-compose 服务组合在一起:
- APCUPSD 镜像作为一个容器,带有 设备映射 从 ups-compute-and-network 主机到 /dev/ups 容器中
- APCUPSD 图像作为容器与 设备映射 用于 ups-screen 在主机上 /dev/ups 在容器中
- Multimon 与环境变量中包含的两个 APCUPSD 实例的服务名称 (docker-compose 服务在组合网络中可通过 docker-composeDNS 名称发现)
完整的Docker设置在此:https://github.com/crossan007/APCUPSD-Multimon-Docker
现在,我不会尝试创建自定义init脚本、在systemd中复用进程,以及覆盖apcupsd的配置发现机制,而是有一个明确定义的接口来隔离apcupsd的实例,为我的两个APC UPS设备提供状态页面。


感谢您的阅读,希望这能以某种方式帮助您!
常见问题
- 2026/05/13什么是浪涌和过压?
- 2026/05/13什么是波形失真?
- 2026/05/13您应该将UPS插入电源插板吗?
- 2026/04/15APC产品综合指南:满足各种需求的电
- 2026/04/15如何选择适合您数据中心的正确APC
- 2026/04/15APC Smart-UPS 与传统 UPS:您应该选
- 2026/04/15为什么APC在线互动式UPS是您业务的
- 2026/04/152026年最适合数据中心和IT机房的AP
- 2026/04/152026年从值得信赖的来源在线购买AP
- 2026/04/15APC Smart-UPS 2026年评测:仍然是商
