- 網路 UPS 工具可讓您管理和監控一個或多個 UPS 系統,集中管理警報和自動關機操作。
- 使用 Raspberry Pi 作為 NUT 主控單元,可實現低功耗、高靈活性,並與多種 UPS 型號相容。
- 透過設定檔和 upssched-cmd 腳本實現自動化是協調有序關機和通知的關鍵。
- 適當的安全性配置、日誌記錄和測試可以降低在網路上暴露 NUT 時的風險,並提高系統可靠性。
擁有UPS但未正確配置 自動關機軟體 這就像繫著一條沒繫的安全帶:它看似能保護你,但在關鍵時刻卻無法發揮作用。如果你已經讀到這裡,你可能正在尋找一種可靠的方法,確保你的伺服器、虛擬化實驗室或家用電腦在斷電時能夠正常關機。
本文將探討如何 配置帶有UPS的自動關機系統 本指南將重點介紹 Linux/Raspbian 系統上的 Network UPS Tools (NUT) 軟體工具,並探討其他替代方案和實際案例,例如常見的 APC Smart-UPS(該產品已不再官方支援某些 VMware 解決方案)。目標是讓您在閱讀完本指南後,能夠清楚了解各種方案、逐步設定方法以及需要考慮的關鍵要點,從而避免因斷電而措手不及。
為什麼你的UPS需要自動關機功能

許多用戶購買UPS只是為了獲得幾分鐘的備用電源,但他們忘記了UPS的真正價值在於… 自動安全關機 當電池電量不足時,必須執行此步驟。如果沒有此步驟,您的虛擬機器或伺服器可能會意外關閉,從而導致資料損壞的風險。
在實驗室環境中 ESXi 主機、叢集或包含多個虛擬機器的機器理想情況下,UPS 應該發出正在使用電池供電的信號,軟體應該協調有序關機:首先是關鍵虛擬機,然後是輔助服務,最後是主機本身。當製造商停止支援其軟體時(例如某些針對 VMware 的網路關機解決方案就出現了這種情況),就必須尋找替代方案。
什麼是網路UPS工具(NUT)?為什麼它被廣泛使用?

NUT 是一套 開源工具 專為管理 Unix 和 Linux 系統上的不間斷電源 (UPS) 系統而設計。它包含驅動程式、守護程式和監控實用程序,可讓您讀取 UPS 狀態、回應事件並協調自動關機。
它的優點之一在於它提供了一種 主/從模式一台設備充當 NUT 伺服器,透過實體連接(通常透過 USB 或串列埠)連接到 UPS,一個或多個客戶端透過網路連接到該伺服器以讀取 UPS 狀態並做出關機決策。這樣,例如,您可以使用 Raspberry Pi 來管理 UPS 和其他多個裝置。 連接的 Windows 伺服器 作為奴隸。
此外,NUT因其…而備受重視。 廣泛的硬體相容性它支援眾多不同的製造商和型號:APC、Salicru、Eaton、CyberPower 等等。即便如此,我們仍然建議您在啟動前先在其官方網站上查看硬體相容性列表,以確認您的特定型號是否受支援。
另一個有趣的方面是,作為一款基於 GPL 授權的自由軟體, 它依然活躍,並且得到了很好的照顧。它經常會收到改進、修復和新的驅動程序,這比製造商可能一夜之間放棄的專有解決方案更有用。
使用 NUT 作為自動關機軟體的優缺點
在深入了解命令和設定檔之前,最好先列出一份清晰的清單。 堅果的優缺點 評估它是否符合你的情況,或是否值得考慮商業替代方案。
NUT的主要優勢
NUT最大的優勢之一是 集中式遠端監控 以及用以下方式補充的可能性 先進能源政策透過一台伺服器,您可以查看一台或多台UPS設備的狀態:電量、電池百分比、預計剩餘時間、近期事件等等。這大大簡化了多設備網路中的監控。
它也因其以下能力而脫穎而出: 管理多個UPS 從同一套安裝方案開始,您可以從一台家用UPS開始,逐步擴展到更複雜的配置,在不同機架或房間內部署多台設備,同時保持相同的通知和自動關機邏輯。
另一個對其有利的點是 行動自動化NUT 可讓您定義每個事件發生時應該執行的操作:例如斷電、電池電量低、與 UPS 通訊中斷等。通常的做法是觸發有序的伺服器關機,但您也可以執行自訂腳本、關閉某些服務,或在所有服務關閉之前發送警報。
關於通知功能,NUT 提供了一個非常靈活的基礎架構。透過合適的腳本,您可以… 發送電子郵件、簡訊或推播通知 還可以與第三方應用程式整合。電子郵件通常是預設選項,但透過與 Twilio、Pushover、Slack、Telegram 或 Nagios 或 Zabbix 等監控系統集成,選項會更多。
最後要指出的是,這只是一個解決方案。 資源消耗量低即使在配置較低或較舊的硬體上,例如上一代樹莓派,對性能的影響也微乎其微,因此非常適合 24/7 全天候運行而無需擔心功耗。
NUT的缺點和敏感點
主要缺點是它的 初始配置並非易事沒有簡單的圖形化精靈;所有操作都透過 /etc/nut/ 目錄下的 .conf 檔案完成。這需要一定的技術專長和仔細閱讀文檔,尤其是在混合使用不同型號的 UPS 或為多個客戶端配置不同環境時。
還有某種 網絡依賴 使用主/從模式時,如果網路發生故障或在斷電期間出現連接問題,從屬設備可能會停止從 UPS 接收訊息,並且無法按預期關閉,除非它們具有本地備份機制。
就安全性而言,當暴露 網路 NUT 守護程式你必須小心。如果你沒有正確配置使用者、密碼和存取限制,系統可能容易受到未經授權的訪問,顯而易見的風險是有人可以遠端關閉關鍵設備。
最後,儘管社區非常活躍,但它仍然是一種工具。 開源,並有社群支持您將無法像某些專有解決方案那樣獲得 24/7 全天候業務支援電話熱線,如果由經驗不足的人員管理,這可能是一個缺點。
典型場景:UPS APC、VMware 以及官方軟體無法使用時的替代方案
如今非常常見的情況是,有人買了 APC智能UPS 為了保護一個包含多台 ESXi 主機的虛擬化實驗室,使用者發現製造商要求使用其網路關機解決方案時需要額外的管理卡。更糟的是,VMware 的關機軟體已經停止開發,或不再支援最新版本的虛擬機器管理程式。
在這種情況下,尋找與製造商無關的解決方案就顯得有意義,這種解決方案可以讓你… 靈活配置關機這時 NUT 就派上了用場:你透過 USB 將 APC 連接到 Linux 機器(例如 Raspberry Pi 或小型伺服器),並使用該系統作為“大腦”,檢測事件並觸發其餘機器的關機。
對於 ESXi 主機,有幾種策略:從使用 遠端腳本 它會向虛擬機和主機發送關機命令,甚至依賴一個管理虛擬機,當該虛擬機收到 NUT 警報時, 按順序關閉整個環境。雖然它不像製造商的原始軟體那樣即插即用,但即使是那些不再獲得官方支援的產品,它也能讓你重新獲得控制權。
整體思路在所有情況下都相同:控制單元監控UPS,檢測電池狀態,並在出現風險時, 柔和的靜音管弦樂隊 涉及的所有系統,無論是實體系統還是虛擬系統。
使用搭載 NUT 的 Raspberry Pi 作為 UPS 主伺服器
一個非常流行的設定是使用 樹莓派,搭載 Raspbian 系統 作為 NUT 主伺服器。這種方法有幾個明顯的優點:樹莓派功耗極低,可以一直開機,價格便宜,而且還允許您自訂通知、整合和腳本,而無需依賴 UPS 保護的主系統。
架構很簡單:只要將UPS連接到樹莓派即可。 USB 或串口您可以從官方軟體倉庫安裝 NUT,並配置各種 .conf 檔案來定義驅動程式、運作模式(獨立、主、從)、使用者和關機操作。然後,您可以新增從設備,這些設備可以透過網路檢查 UPS 的狀態。
首先,建議檢查UPS型號與NUT的兼容性。對於UPS而言, Salicru SPS SOHO+ 1400VA例如,雖然使用了具有自動連接埠的 blazer_usb 驅動程序,但每個型號可能需要不同的驅動程序,因此最好查看官方文件或支援的硬體清單。
在 Raspbian 上安裝 NUT
安裝非常簡單,因為該軟體包已包含在標準軟體倉庫中。只需以超級使用者身分執行以下命令即可安裝基礎軟體及其相依性:
sudo apt-get install nut
安裝完成後,請務必確認… 用戶和群組“nut”這些元件是 NUT 守護程式用於與硬體互動和管理服務的。如果由於任何原因未建立這些組件,則需要手動新增。
/etc/nut/ 中的基本配置文件
NUT配置主要在 /etc/nut/其中包含多個 .conf 檔案。以下總結了其中最重要的幾個檔案及其在以 Raspberry Pi 為主控的典型配置中的作用:
首先有 nut.conf其中定義了通用運作模式。在簡單的配置中,如果只有一個設備控制 UPS 並處理自身的關機,則通常使用以下方式:
MODE=standalone
然後我們發現 ups.conf用於聲明 UPS 及其驅動程式的文件。以上述 Salicru 為例,配置範例如下:
driver = blazer_usb
port = auto
desc = "SAI Salicru"
文件 upsd.conf 它控制監聽 NUT 客戶端請求的守護程式的行為。它包含一些參數,例如資料的最大保留期限或最大連接數。一個典型的例子是:
MAXAGE 15
MAXCONN 1024
LISTEN 127.0.0.1 3493
LISTEN ::1 3493
為了定義如何監控 UPS 以及在發生事件時應採取的措施,採用了以下方法: upsmon.conf本部分指定正在監控的 UPS、用於身份驗證的使用者帳戶、系統關機命令以及眾多時間和通知參數。以下是一個範例片段:
MONITOR salicru@localhost 1 nonmaster contraseña master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /bin/upssched-cmd
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
En upsd.users 已定義有權與 NUT 守護程式互動的用戶,以及他們的密碼和可執行的操作。一個簡單的例子是:
password = contraseña
actions = set
instcmds = ALL
upsmon master
最後, upssched.conf 它負責處理 NUT 事件與程式腳本執行的特定操作之間的關係。這裡定義了定時器、命令以及用於傳遞事件的管道。一個典型的程式碼片段可能如下所示:
CMDSCRIPT /bin/upssched-cmd
PIPEFN /var/run/nut/upssched/upssched.pipe
LOCKFN /var/run/nut/upssched/upssched.lock
AT COMMOK * EXECUTE notify
AT COMMBAD * EXECUTE notify
AT REPLBATT * EXECUTE notify
AT NOCOMM * EXECUTE notify
AT FSD * EXECUTE forced-shutdown
AT NOPARENT * EXECUTE notify
AT SHUTDOWN * EXECUTE notify
AT ONLINE * CANCEL-TIMER shutdown
AT ONLINE * EXECUTE resume
AT ONBATT * START-TIMER shutdown 60000
AT ONBATT * EXECUTE shutdown-warning
AT LOWBATT * START-TIMER shutdown
AT LOWBATT * EXECUTE shutdown-warning
upssched-cmd 腳本在自動關機中的作用
當我們進入檔案館時,以上所有內容都變得有意義了。 /bin/upssched-cmd該腳本負責執行與每個事件相關的特定操作:發送電子郵件、重新啟動驅動程式、啟動關機或簡單地將記錄寫入日誌系統。
該腳本通常用 shell 編寫,並使用環境變數。 通知類型 確定發生了哪個 NUT 事件。根據該值,它會建立一條訊息並透過電子郵件發送,同時將事件記錄到系統日誌中。考慮的事件範例包括:
- 在線設備在正常供電後恢復正常運作。
- 安巴特停電了,UPS正在使用電池供電。
- 低電量電池電量低,即將關機。
- FSD (強制關機):設備被強制關機。
- COMMOK / COMMBAD與 UPS 的通訊已恢復或已遺失。
- REPLBATT:表示需要更換電池。
- 無通訊/無父母UPS 不可用或無法委派關機任務。
一個實際細節是,在某些情況下,例如 COMMBAD 或 NOCOMM,腳本可能會嘗試 重啟驅動程式 透過類似這樣的命令從 UPS 發送訊號:
upsdrvctl start salicru
除了處理事件之外,腳本通常還接受定義特定操作的附加參數,例如「shutdown-warning」、「shutdown」、「resume」或「forced-shutdown」。根據參數的不同,它會建構不同的訊息,甚至可以執行以下命令:
shutdown -p now o shutdown -h 100
腳本末尾通常會寫入產生的訊息。 系統日誌 使用類似這樣的程式碼行:
logger -t upssched-cmd "${_message}"
這樣一來,所有事件都會被記錄下來,以便日後進行審查,從而調試故障或檢查實際停電期間的行為。
NUT檢查、日誌記錄和故障排除
文件和腳本配置完成後,最好做一些事情。 功能測試 在認為系統已完成之前,一個簡單的步驟是重新啟動作業系統,以確保所有 NUT 服務在啟動時都能正確啟動。
一個非常有用的命令是:,可以用來驗證 UPS 驅動程式是否能正常啟動。
upsdrvctl start salicru
如果此命令失敗,首先要做的事情是 查看系統日誌 依 NUT 或 UPS 相關訊息進行篩選。一種快捷方法是:
tail -f /var/log/syslog | grep ups
常見錯誤包括 USB 連接埠被佔用、權限不足、型號不支援、所選驅動程式存在問題等等。如果偵測到驅動程式錯誤,您可以嘗試重新安裝 NUT oa。 使用備用驅動程式 此型號是否支援此功能,請查看相容性文件。此外,務必確認 UPS 已通電並正確連接。
對於 Raspbian 系統,值得檢查一下: 內核識別到該設備 透過 USB 連接時,如果系統甚至檢測不到硬件,則可以使用 lsusb 或 dmesg 等命令提供線索。
從屬客戶端、整合和其他作業系統
一旦您的 NUT 主伺服器穩定,您就可以添加 奴隸顧客 在網路上的其他電腦上。在 Linux 系統上,只需安裝 NUT 用戶端,並將設定指向主伺服器的 IP 位址,使用 upsd.users 中定義的使用者進行身份驗證,並將 upsmon 設定為在接收到低電量訊號或 FSD 事件時執行自身關機操作。
在 Windows 系統中,您可以使用以下工具: WinNUT這些設備作為客戶端連接到 NUT 伺服器並讀取 UPS 狀態。之後,您可以設定當主伺服器指示電池電量不足時,Windows 電腦自動關機。
NUT 還具有 macOS 中的連接埠和安裝這通常透過 Homebrew 等軟體包管理器完成(例如,使用類似「brew install nut」的命令)。然而,在 macOS 上,USB 驅動程式的支援可能比較有限,因此不像在 Linux 上那麼簡單直接。
關於 Windows 系統,雖然有辦法讓 NUT 運行,但在許多情況下,使用其他方法更為實用。 製造商特定解決方案 例如,APC PowerChute 適用於純 Windows 環境,只要產品持續積極支援。
高級通知和與監控系統的集成
NUT中最強大(且最少被利用)的部分之一是 通知自訂upssched-cmd 腳本不僅限於發送電子郵件;它還可以與外部 API 集成,使用 Twilio 等服務發送短信,或使用 Pushover 或 Pushbullet 發送推送通知。
此外,NUT 與…整合得相當好 監控平台 例如,可以透過插件或自訂腳本將監控系統(如 Nagios、Icinga、Zabbix 或 Prometheus)整合到監控系統中。這樣,低電量、斷電或通訊故障等警報就可以傳送到您常用的管道,例如 Slack、Telegram、儀表板等。
關鍵在於利用 upssched-cmd 的呼叫來啟動相應的腳本或向您的警告服務端點發出 HTTP 請求。這樣,任何關鍵的 UPS 事件都將在您已監控其他基礎架構狀態的相同生態系統中可見。
在網路上暴露 NUTS 時應遵循良好的安全實踐
與任何可透過網路存取的服務一樣,NUT守護程式必須進行設定。 一開始就保障安全別忘了,這最終可能會導致機器嚴重停機,所以最好謹慎行事。
第一層防護是使用 強用戶名和密碼 在 upsd.users 檔案中,避免使用無關緊要的鍵值或與其他服務共用的鍵值。此外,建議將每個使用者的權限限制在必要的範圍內:並非每個人都需要執行管理命令。
在 upsd.conf 檔案中,最好使用 LISTEN 等指令限制可以連接到守護程式的位址,例如僅指向特定 IP 位址,或僅允許從管理網路存取該服務。結合防火牆規則,這可以顯著縮小攻擊面。
在安全性至關重要的環境中,建議編譯 NUT 時啟用對以下功能的支援: SSL / TLS 將主從裝置之間的連接進行加密,尤其是在連接經過不可信網路時。此外,務必定期查看日誌,以偵測未經授權的存取嘗試或異常行為。
最後,建議保留作業系統和 NUT。 已更新在軟體發布安全性修補程式和新版本時及時應用,以降低已知漏洞帶來的風險。
擁有UPS只是成功的一半;另一半則需要設定。 經過精細調整的自動關機軟體 這需要結合使用 NUT 等工具、輕量級的 Raspberry Pi、運行在不同機器上的從屬客戶端,以及一套完善的通知和安全策略。透過仔細設定 /etc/nut/ 目錄下的檔案、微調 upssched-cmd 腳本並監控日誌,您可以建立一個強大的系統,該系統能夠快速回應斷電情況、保護您的數據,並且即使在製造商停止為您的環境提供官方支援的情況下,也能保持靈活性。
對字節世界和一般技術充滿熱情的作家。我喜歡透過寫作分享我的知識,這就是我在這個部落格中要做的,向您展示有關小工具、軟體、硬體、技術趨勢等的所有最有趣的事情。我的目標是幫助您以簡單有趣的方式暢遊數位世界。