Network UPS Tools (以下簡稱 NUT ) 是一套第三方可監控 UPS 設備的軟體,除了支援多家大廠的設備,還能將運作模式設定成監控伺服器,透過別台電腦就能遠端取得該伺服器所連接的 UPS 狀態,並確保斷電時可收到資訊,即時進入正常關機程序。最棒的是,該軟體能在 Windows、Linux 及 MAC 等多種平台使用,連知名 NAS 製造商如 QNAP 及 Synology,他們的系統其實也是利用 NUT 實現對 UPS 設備的監控。
接下來,說明如何在 Windows 上安裝 NUT 監控 UPS 狀態。
以在 Windows Server 2016 設定 NUT 監控 APC BR1000G-TW 為例,請先確定主機已透過 USB 與 UPS 連接,確認方式可以從 Windows 的裝置管理員觀察。未正確辨識出廠牌及型號沒關係,只要能出現像下圖的 HID UPS Battery 資訊,或者確認裝置名稱是插入連接 UPS 的 USB 後所產生的,就代表 Windows 已與設備連接。
首先,從 NUT 網站下載頁面點擊並執行 Windows 版的安裝程式。
安裝過程還算無腦 ( 但是安裝後的設定很傷腦 ),就是一直點「Next」,除非有想變更安裝位置
NUT 安裝完成後,務必到安裝目錄的 others 資料夾,點擊「wdi-simple.exe」程式,就會再次嘗試安裝驅動。( 主機請保持可對外上網狀態 )
C:\Program Files (x86)\NUT\others\wdi-simple.exe
UPS 設備在 Windows 裝置管理員則會顯示為「NUT USB Driver」
確認完成,請參照前面的提示訊息重新插拔連接線或重開機。
如果安裝驅動這步驟怎樣都失敗的話,後面都可以不用做了,只能用原廠提供的管理軟體監控 UPS。不然...就是換個不同品牌的 UPS 來玩吧 ( 真心推薦 APC UPS !!! )
接著,編輯設定檔
請移駕至安裝目錄的 etc 資料夾,將裡面檔名後面有的「.sample」字串都刪除。另外,我習慣會留存預設的設定檔範本,所以截圖有另一個資料夾「Source」。
C:\Program Files (x86)\NUT\etc
需編輯內容的設定檔共有五個,以下分別提供範例說明及截圖參考:
nut.conf - 設定 NUT 運作模式
MODE=netserver
請直接用「netserver」,除了等同單機模式外,還可以讓其他台電腦監控狀態。
ups.conf - UPS 連接設定
請先找到 UPS 所對應的驅動名稱
以範例的 APC BR1000G-TW 來說,從裝置管理員的資訊及在 NUT 網站的硬體相容性頁面,找到的對應驅動名稱是「usbhid-ups」,再點擊「usbhid-ups」連結,可以看到更詳細的設定說明。如果設備的型號無法在 NUT 網站找到對應驅動名稱,建議可以直接嘗試「usbhid-ups」。
[自訂連接名稱] driver = UPS設備對應的驅動名稱 port = auto
upsd.conf - 設定 NUT 服務
LISTEN 127.0.0.1 服務埠 LISTEN 主機IP 服務埠
這裡比較要注意的是
1. 請避免填入 IPv6 的「::1」
因為測試發現會導致無法啟動對外服務。
( 自己測試過程踩中這個,卡關好一陣子才找到原因,差點想翻桌 )
2. 填入的服務 IP 位置務必與系統設定相同
upsd.users - 設定管理者及一般監控存取帳號
以下為管理者帳號的建立範例
[管理者帳號] password = 管理者密碼 actions = SET instcmds = ALL
建議設定檔再加上一組監控用一般帳號,未來可供其他電腦存取
[監控帳號] password = 監控密碼 upsmon slave
upsmon.conf - 監控連接設定
MONITOR 自訂UPS連接名稱@IP 1 管理者帳號 管理者密碼 master
最後面的「master」值,表示這台將作為 UPS 的主控端,且電源中斷時的關機會晚於 Slave 的電腦
同時建議在 upsmon.conf 中,設定斷電時,主控端可以自動執行關機程序。
找到預設的指令行
SHUTDOWNCMD "/sbin/shutdown -h +0"
針對 Windows 環境改成
SHUTDOWNCMD "C:\\WINDOWS\\system32\\shutdown.exe -s -t 等待關機的秒數"
如果對參數設定有任何問題,官方給的設定檔內有完整的說明及範例可先參考。
上面五個設定檔編輯完,就結束了嗎?
不,還沒完,請務必參考下面說明到特定目錄補上相關 dll 檔。
( 相關 dll 檔可從網路搜尋下載,這又是另一個沒做好做滿,NUT 就不會動的雷 )
在 NUT 安裝目錄的 bin 資料夾裡,補上兩個 dll 檔
libeay32.dll
ssleay32.dll
C:\Program Files (x86)\NUT\bin
在 NUT 安裝目錄的 sbin 資料夾裡,補上三個 dll 檔
libeay32.dll
ssleay32.dll
libgcc_s_dw2-1.dll
C:\Program Files (x86)\NUT\sbin
因為沒有這些 dll 檔,即便 NUT 服務看似有正常啟動,但實際上,相關指令無法運作執行,手動執行會得到「The program can't start because xxxxx.dll is missing from your computer. Try reinstalling the program to fix problem.」的錯誤訊息
確認設定檔編輯完成及 dll 檔都補齊了,剩下就比較簡單了。
由於未來要提供其他台電腦監控,所以千萬別忘記在 Windows 防火牆要設定開埠
要確認 NUT 是否正確啟動提供服務,可先執行以下指令,檢查服務埠是否開啟
netstat -an | findstr NUT服務埠號
服務埠有開啟後,接著到 NUT 安裝目錄的「bin」資料夾中,執行下面指令
upsc UPS設備在設定檔的代稱
也可以執行下面指令,瞭解可對這台 UPS 做哪些設定。
說真的,可以做的不多,比較有用的大概就只有關掉警示用的蜂鳴器,尤其 UPS 是在家使用時。
upscmd -l UPS設備在設定檔的代稱
關閉蜂鳴器範例
比較特別的是,對 UPS 做設定變更時,需要輸入管理者的帳密。這還蠻合理的,不然隨便下個指令,就能立即對 UPS 完成控制也蠻恐怖的。
upscmd UPS設備在設定檔的代稱 beeper.disable
再執行一次 upsc 指令,檢查 UPS 狀態
可以發現蜂鳴器已確實被關閉。不信的話,可以拔掉 UPS 的插頭看看 (咦)
確認都完成 NUT 的設定與監控使用後,其他台 Windows 電腦就可以安裝 WinNUT 或 Windows NUT Client,透過網路方式即時接收到主控端的 UPS 狀態,並且在斷電時能進入正常關機程序。
關於進階設定及 Client 的部分,因為感覺這篇文已過於冗長,會再寫文進一步說明如何佈建。
最後,稍微幫大家重新整理安裝 NUT 的步驟:
1. NUT 軟體安裝
2. 驅動安裝
3. 編輯相關設定檔
4. 補 dll 運作元件
5. 設定防火牆
6. 啟動 NUT 服務
7. 指令及斷電測試
衷心希望這篇文章能幫助更多想保護伺服器的 IT 人,不要再傻傻讓主機等著 UPS 沒電而不正常關機。
非常感謝提供設定筆記,正合我現時情況,基本成功安裝,但一直未能解決發送電郵以通知有事故發生,請問有相關設定資料嗎? 我現用windows 版本的sendemail (http://caspian.dotconf.net/menu/Software/SendEmail/)
這個問題我之前研究時也有想過,
當時想到的方法是,指定呼叫另一支程式做傳送郵件及關機動作,
後來一忙就沒有接著繼續測試確認這部分,
如果後續我有成功,屆時再來分享
終於找到解決辦法,於upsmon.conf 更改以下指令行:
NOTIFYCMD "C:\\sendEmail.exe -s smtp.abc.com:25 -f john@abc.com -t john@abc.com -u APC_UPS_Alert"
事故發生後將發出電郵通知 (例如15秒):
DEADTIME 15
非常謝謝您回來分享
您好,首先謝謝您這篇文章的教學,得到的收穫以及幫忙非常的多。
也成功設定了兩台UPS(APC、DELTA廠商),
但是如今想設定minuteman的UPS卻發生以往沒發生過的問題,
在初始第一步開啟wdi-simple.exe時,
卻一直搜尋不到可用的UPS設備。
可是電腦裝置管理員中卻有minuteman ups的設備資訊,
也能查看到VID以及PID,唯有wdi-simple.exe搜尋不到此設備,
想詢問這樣的問題有辦法解決嗎?
我從 NUT 官網相容性列表找不到 Minuteman UPS 的資料,
恐怕就是無法用 NUT 去驅動及控制了
以我自己來說,現在都盡量使用 APC 的 UPS了,他的第三方資源真的豐富很多,用第三方就能達到我期望的網路關機控制
请问下,按这样配置好了后,服务器本身还是不会按设定的倒计时关机啊?
倒是客户端群晖没问题了。
另外,威联通怎么就连不上呢?(ups名称,用户名,密码都改了的)
盼回复,谢谢。
服務器本身無法倒數關機問題,建議檢查一下 upsmon.conf 的設定及指令是否正確
至於 QNAP 的連線問題,手邊沒有類似環境可以測試確認,建議先參考這篇討論進行除錯
UPS in slave mode and NUT
请问您用的libeay.dll和ssleay.dll是什么版本的?我在网上找了几个都用不了。如果方便的话可以分享一下文件吗?
配置之后启动服务时显示:“本地计算机服务network UPS Tools启动后停止,某些服务在未由其他服务或程序使用时将自动停止”,请问这是什么问题,望回复,谢谢!
抱歉,我沒遇過這樣的狀況
目前猜測是不是dll檔不正確
请问是在UPS使用电池的时候就会触发SHUTDOWNCMD命令还是在UPS电量低的时候才会触发呢?
看你的設定哪一個條件先達到,就會觸發關機
比如設定
低電量為40%
剩餘時間為5分鐘
當斷電時,看這兩個條件哪一個先觸發到,
假設定電量先掉到40%,但是剩餘時間還有6分鐘,
依然會觸發關機程序
"低電量為40%
剩餘時間為5分鐘",在upsmon.conf里设置吗?请问是哪一行命令,文件里不太看得懂,谢谢您!
在 apcupsd.conf 的設定檔尋找
BATTERYLEVEL
MINUTES
修改這兩個設定到你期待觸發的數值