場景
??備注:
求輕噴, 求放過. ??
我真的是個理線方面的白癡. 這已經是我的極限了. ??
我的家庭實驗室 Homelab 服務器集群配置如下.


上半部分之前已經介紹過了, 這里就不再贅述了. 今天重點介紹介紹 UPS 和 NAS 部分.
-
1臺 UPS, 型號為 APC Back-UPS 650. 插座插著: NAS 和 插線板(插線板上連了4個 N100小主機和其他; 通過數據端口和 NAS 連接). 如下圖: (求輕噴, 求放過. ??)
UPS -
1 臺威聯通 QNAP TS-453Bmini NAS. 如下圖: (求輕噴, 求放過. ??)
現在的需求是:
- UPS 斷電后一段時間(如 5min 后), NAS 自動斷電;
- NAS 作為 UPS Server 運行, UPS 斷電后, 通知其他 4 臺 N100 小主機
- 4 臺 N100 小主機收到通知后, 也過一段時間(如 5min 后)自動斷電.
具體實現概述如下:
- 物理層面: UPS 通過數據線連接到 NAS USB
- 軟件層面:
- NAS: 通過 UI 配置斷電后操作;
- NAS: 通過 UI 啟用 UPS Server 配置;
- N100 小主機: UPS Client 配置.
細節(jié)步驟如下:
實戰(zhàn)
1. 物理層面: UPS 通過數據線連接到 NAS USB
這里我就不放圖了, 因為就在上面那一堆線里面... 這個機柜在墻角, 我左跪右跪看了一圈也沒找到能拍清楚的角度... ??
APC UPS 自帶一根數據線, 具體操作如下:
使用 USB 纜線將 Back-UPS 連接到 NAS。將一端插到 Back-UPS 后面板上的 POWERCHUTE 端口,另一端插到計算機上的 USB 端口。
就是下圖的 ⑥:

完成.
驗證
完成后, 我們可以訪問 威聯通 QNAP QTS 界面, 會看到 UPS 的相關信息, 具體如下:

接下來進入軟件層面操作.
2. NAS: 通過 UI 配置斷電后的操作
具體如下:

- 進入 威聯通 QNAP QTS 界面;
- 訪問 控制臺 -> 系統(tǒng) -> 外界設備 -> UPS
- 選擇 USB 連接 -> 當電源失效時, 10 分鐘后進入自動保護模式. (當然, 你可以選擇另一選項, 即: 關閉 NAS)
如果你只需要 UPS 和 NAS 聯動, 那么到這里就配置完成了.
3. NAS: 通過 UI 啟用 UPS Server 配置
如果你還需要和其他主機/服務器聯動, 那么需要通過 UI 啟用 UPS Server 配置, 具體如上圖 ⑥:
- 啟用 網絡不間斷電源服務器(即 UPS Server)
- 并添加 4 臺 N100 小主機的 IP 地址. 如: 192.168.3.154
完成.
額外說明
威聯通 QNAP QTS 在后臺, 實際上運行的是: upsd 服務, 監(jiān)聽了 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 ups
6960 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
這里我們需要知道的是:
- 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 = 123456
allowfrom = localhost
actions = SET
instcmds = ALL
upsmon master # or upsmon slave
這里我們需要知道的是:
- QNAP UPS Server 的用戶是:
admin - 密碼是:
123456
總結一下, 威聯通 QNAP QTS Server 信息:
- 實際上運行的是:
upsd服務 - 監(jiān)聽了
3493端口 - UPS Server 的 名稱是:
qnapups(?? 注意: 在威聯通所有 NAS 上, 這個名字都是固定的) - 用戶是:
admin - 密碼是:
123456
后面 N100 配置 UPS Client 需要用到這些信息.
4. N100 小主機: UPS Client 配置
我的 N100 小主機是 Ubuntu 24.04, 要在 Linux 系統(tǒng)上實現與 UPS(不間斷電源)服務器的交互,并在斷電 5 分鐘后自動關機,通常需要使用 UPS 監(jiān)控軟件。常見的工具是 NUT(Network UPS Tools),它是一個開源的 UPS 監(jiān)控和管理工具。
既然已經在 NAS 上運行了 upsd,并且 UPS 是 APC Back-UPS 650 通過 USB 連接到 NAS,那么在小主機上,可以通過配置 NUT 客戶端(upsmon)來與 NAS 上的 upsd 交互,并實現斷電 5 分鐘后關機。
以下是詳細的步驟:
4.1. 在 Linux 設備上安裝 NUT 客戶端
在需要監(jiān)控 UPS 的 Linux 設備上,安裝 NUT 客戶端工具:
-
對于基于 Debian/Ubuntu 的系統(tǒng):
sudo apt-get update sudo apt-get install nut-client -
如果你是基于 Red Hat/CentOS 的系統(tǒng):
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 種運行模式, 分別為:
-
none: NUT 沒有配置,或者使用集成電源管理,或者使用一些外部系統(tǒng)來啟動 NUT 組件. 因此,不需要由 NUT 軟件包捆綁的腳本或服務啟動任何內容。 -
standalone: 這種模式只針對本地配置,由 1 個 UPS 保護本地系統(tǒng)。這意味著要啟動 3 個 NUT 層(驅動程序、upsd和upsmon)及相應的配置文件。這種模式還可以處理 UPS 冗余。 -
netserver: 與獨立配置相同,但還需要一些額外的網絡訪問控制(防火墻、tcp包裝器)以及在upsd.conf中可能需要一個特定的 LISTEN 指令。由于此模式對網絡開放,因此應特別關注安全問題。 -- 很明顯, NAS UPS Server 是這種模式. -
netclient: 這種模式只要求upsmon(以及它可能使用的工具,如upssched或自定義腳本)來監(jiān)視遠程NUT服務器,并可能關閉此系統(tǒng)(在這種情況下,upsmon的一部分必須以root身份運行)。-- 很明顯, 我們需要設置 Linux 設備為此模式.
調整 mode 配置為:
MODE=netclient
4.4. 啟動 NUT 客戶端服務
啟動 upsmon 服務并設置為開機自啟:
-
對于基于 systemd 的系統(tǒng):
sudo systemctl start nut-client sudo systemctl enable nut-client -
對于基于 SysVinit 的系統(tǒng):
sudo service nut-client start sudo update-rc.d nut-client defaults
查看啟動狀態(tài):
4.4.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 controller
Loaded: loaded (/usr/lib/systemd/system/nut-monitor.service; enabled; preset: enabled)
Active: inactive (dead) since Sat 2025-03-22 17:12:20 CST; 8s ago
Duration: 5ms
Process: 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: 15ms
Mar 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.
所以執(zhí)行如下命令修復:
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 controller
Loaded: loaded (/usr/lib/systemd/system/nut-monitor.service; enabled; preset: enabled)
Active: active (running) since Sat 2025-03-22 17:15:21 CST; 2s ago
Process: 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: 22ms
CGroup: /system.slice/nut-monitor.service
├─350298 /lib/nut/upsmon -F
└─350310 /lib/nut/upsmon -F
Mar 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 狀態(tài)
在 Linux 設備上,使用以下命令檢查是否能夠正確獲取 UPS 狀態(tài):
? 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 的詳細信息,例如電池狀態(tài)、輸入電壓等。
4.5.2 模擬斷電測試
你可以通過斷開 UPS 的電源來測試配置是否正確。如果一切正常,Linux 設備應該在斷電 5 分鐘后自動關機。
全部完成! ??????
5. 其他注意事項
-
防火墻配置:確保 NAS 的防火墻允許來自 Linux 設備的
3493端口的連接。 -
權限問題:如果你是其他 NAS, 需要確保 NAS 上的
upsd.users文件中定義的權限允許客戶端設備訪問 UPS 信息。 - 時間同步:確保 NAS 和 Linux 設備的時間同步,以避免因時間差異導致的監(jiān)控問題。
總結
通過以上步驟,你應該能夠實現:
當 UPS 斷電后:
- NAS 自動關機
- 其他 Linux 設備 自動關機
??????
三人行, 必有我?guī)? 知識共享, 天下為公. 本文由東風微鳴技術博客 EWhisper.cn 編寫.
