九月 19 2017

在Windows安裝Network UPS Tools監控UPS

分類:軟體好硬

NUT WebSite

Network UPS Tools (以下簡稱 NUT ) 是一套第三方可監控 UPS 設備的軟體,除了支援多家大廠的設備,還能將運作模式設定成監控伺服器,透過別台電腦就能遠端取得該伺服器所連接的 UPS 狀態,並確保斷電時可收到資訊,即時進入正常關機程序。最棒的是,該軟體能在 Windows、Linux 及 MAC 等多種平台使用,連知名 NAS 製造商如 QNAPSynology,他們的系統其實也是利用 NUT 實現對 UPS 設備的監控。

接下來,說明如何在 Windows 上安裝 NUT 監控 UPS 狀態。

以在 Windows Server 2016 設定 NUT 監控 APC BR1000G-TW 為例,請先確定主機已透過 USB 與 UPS 連接,確認方式可以從 Windows 的裝置管理員觀察。未正確辨識出廠牌及型號沒關係,只要能出現像下圖的 HID UPS Battery 資訊,或者確認裝置名稱是插入連接 UPS 的 USB 後所產生的,就代表 Windows 已與設備連接。
UPS on DevMgr

首先,從 NUT 網站下載頁面點擊並執行 Windows 版的安裝程式
Download NUT

安裝過程還算無腦 ( 但是安裝後的設定很傷腦 ),就是一直點「Next」,除非有想變更安裝位置
NUT Setup Start

過程會嘗試安裝對應驅動
NUT Setup for Install USB Driver

多次測試發現,這步驟大多會失敗,但不用擔心
NUT Setup Fail on Install USB Driver

NUT 安裝完成後,務必到安裝目錄的 others 資料夾,點擊「wdi-simple.exe」程式,就會再次嘗試安裝驅動。( 主機請保持可對外上網狀態 )

C:\Program Files (x86)\NUT\others\wdi-simple.exe

aska_install_nut_usbdriver_01

驅動是否安裝成功,可以從訊息出現的「Success」得知
aska_install_nut_usbdriver_02

同時,others 目錄也能見到相關資料夾的建立
aska_install_nut_usbdriver_04

UPS 設備在 Windows 裝置管理員則會顯示為「NUT USB Driver」
確認完成,請參照前面的提示訊息重新插拔連接線或重開機。
aska_install_nut_usbdriver_03

如果安裝驅動這步驟怎樣都失敗的話,後面都可以不用做了,只能用原廠提供的管理軟體監控 UPS。不然...就是換個不同品牌的 UPS 來玩吧 /8-)/ ( 真心推薦 APC UPS !!! )

 

接著,編輯設定檔

請移駕至安裝目錄的 etc 資料夾,將裡面檔名後面有的「.sample」字串都刪除。另外,我習慣會留存預設的設定檔範本,所以截圖有另一個資料夾「Source」。

C:\Program Files (x86)\NUT\etc

aska_set_nut_conf

需編輯內容的設定檔共有五個,以下分別提供範例說明及截圖參考:
nut.conf - 設定 NUT 運作模式

MODE=netserver

請直接用「netserver」,除了等同單機模式外,還可以讓其他台電腦監控狀態。

aska_nut_conf_01

 

ups.conf - UPS 連接設定

請先找到 UPS 所對應的驅動名稱
以範例的 APC BR1000G-TW 來說,從裝置管理員的資訊及在 NUT 網站的硬體相容性頁面,找到的對應驅動名稱是「usbhid-ups」,再點擊「usbhid-ups」連結,可以看到更詳細的設定說明。如果設備的型號無法在 NUT 網站找到對應驅動名稱,建議可以直接嘗試「usbhid-ups」。
aska_apcups_find_driver

[自訂連接名稱]
 driver = UPS設備對應的驅動名稱
 port = auto

aska_nut_conf_02

 

upsd.conf - 設定 NUT 服務

LISTEN 127.0.0.1 服務埠
LISTEN 主機IP 服務埠

這裡比較要注意的是
1. 請避免填入 IPv6 的「::1」
因為測試發現會導致無法啟動對外服務。
( 自己測試過程踩中這個,卡關好一陣子才找到原因,差點想翻桌 /=.=/ )
2. 填入的服務 IP 位置務必與系統設定相同

aska_nut_conf_03

 

upsd.users - 設定管理者及一般監控存取帳號

以下為管理者帳號的建立範例

[管理者帳號]
 password = 管理者密碼
 actions = SET
 instcmds = ALL

建議設定檔再加上一組監控用一般帳號,未來可供其他電腦存取

[監控帳號]
 password = 監控密碼
 upsmon slave

aska_nut_conf_04

 

upsmon.conf - 監控連接設定

MONITOR 自訂UPS連接名稱@IP 1 管理者帳號 管理者密碼 master

最後面的「master」值,表示這台將作為 UPS 的主控端,且電源中斷時的關機會晚於 Slave 的電腦
aska_nut_conf_05

同時建議在 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


aska_nut_install_dll_06

在 NUT 安裝目錄的 sbin 資料夾裡,補上三個 dll 檔
libeay32.dll
ssleay32.dll
libgcc_s_dw2-1.dll

C:\Program Files (x86)\NUT\sbin

aska_nut_install_dll_07

因為沒有這些 dll 檔,即便 NUT 服務看似有正常啟動,但實際上,相關指令無法運作執行,手動執行會得到「The program can't start because xxxxx.dll is missing from your computer. Try reinstalling the program to fix problem.」的錯誤訊息
aska_nut_install_dll_05

確認設定檔編輯完成及 dll 檔都補齊了,剩下就比較簡單了。

由於未來要提供其他台電腦監控,所以千萬別忘記在 Windows 防火牆要設定開埠
aska_set_win_firewall_3493

最後,就是到 Windows 的服務去啟動或重啟 NUT
aska_start_nut_service

要確認 NUT 是否正確啟動提供服務,可先執行以下指令,檢查服務埠是否開啟

netstat -an | findstr NUT服務埠號

aska_nut_service_port

服務埠有開啟後,接著到 NUT 安裝目錄的「bin」資料夾中,執行下面指令

upsc UPS設備在設定檔的代稱

正常運作狀況下,就會顯示目前連接的 UPS 的狀態
aska_nut_upsc_ups_info

也可以執行下面指令,瞭解可對這台 UPS 做哪些設定。
說真的,可以做的不多,比較有用的大概就只有關掉警示用的蜂鳴器,尤其 UPS 是在家使用時。

upscmd -l UPS設備在設定檔的代稱

關閉蜂鳴器範例
比較特別的是,對 UPS 做設定變更時,需要輸入管理者的帳密。這還蠻合理的,不然隨便下個指令,就能立即對 UPS 完成控制也蠻恐怖的。

upscmd UPS設備在設定檔的代稱 beeper.disable

aska_nut_upscmd_ups_ctrl_01

再執行一次 upsc 指令,檢查  UPS 狀態
可以發現蜂鳴器已確實被關閉。不信的話,可以拔掉 UPS 的插頭看看 (咦)
aska_nut_upscmd_ups_ctrl_02

確認都完成 NUT 的設定與監控使用後,其他台 Windows 電腦就可以安裝 WinNUTWindows NUT Client,透過網路方式即時接收到主控端的 UPS 狀態,並且在斷電時能進入正常關機程序。

關於進階設定及 Client 的部分,因為感覺這篇文已過於冗長,會再寫文進一步說明如何佈建。

最後,稍微幫大家重新整理安裝 NUT 的步驟:
1. NUT 軟體安裝
2. 驅動安裝
3. 編輯相關設定檔
4. 補 dll 運作元件
5. 設定防火牆
6. 啟動 NUT 服務
7. 指令及斷電測試

衷心希望這篇文章能幫助更多想保護伺服器的 IT 人,不要再傻傻讓主機等著 UPS 沒電而不正常關機。

目前有 15 個回應 , 標籤:


目前有 15 個回應

  1. John 說道:

    非常感謝提供設定筆記,正合我現時情況,基本成功安裝,但一直未能解決發送電郵以通知有事故發生,請問有相關設定資料嗎? 我現用windows 版本的sendemail (http://caspian.dotconf.net/menu/Software/SendEmail/)

    • AskaSu 說道:

      這個問題我之前研究時也有想過,
      當時想到的方法是,指定呼叫另一支程式做傳送郵件及關機動作,
      後來一忙就沒有接著繼續測試確認這部分,
      如果後續我有成功,屆時再來分享

  2. John 說道:

    終於找到解決辦法,於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

    • AskaSu 說道:

      非常謝謝您回來分享 /:D/

  3. Kai 說道:

    您好,首先謝謝您這篇文章的教學,得到的收穫以及幫忙非常的多。
    也成功設定了兩台UPS(APC、DELTA廠商),
    但是如今想設定minuteman的UPS卻發生以往沒發生過的問題,
    在初始第一步開啟wdi-simple.exe時,
    卻一直搜尋不到可用的UPS設備。

    可是電腦裝置管理員中卻有minuteman ups的設備資訊,
    也能查看到VID以及PID,唯有wdi-simple.exe搜尋不到此設備,
    想詢問這樣的問題有辦法解決嗎?

    • AskaSu 說道:

      我從 NUT 官網相容性列表找不到 Minuteman UPS 的資料,
      恐怕就是無法用 NUT 去驅動及控制了

      以我自己來說,現在都盡量使用 APC 的 UPS了,他的第三方資源真的豐富很多,用第三方就能達到我期望的網路關機控制

  4. jcliu 說道:

    请问下,按这样配置好了后,服务器本身还是不会按设定的倒计时关机啊?
    倒是客户端群晖没问题了。
    另外,威联通怎么就连不上呢?(ups名称,用户名,密码都改了的)

    盼回复,谢谢。

    • AskaSu 說道:

      服務器本身無法倒數關機問題,建議檢查一下 upsmon.conf 的設定及指令是否正確

      至於 QNAP 的連線問題,手邊沒有類似環境可以測試確認,建議先參考這篇討論進行除錯
      UPS in slave mode and NUT

  5. hanhan 說道:

    请问您用的libeay.dll和ssleay.dll是什么版本的?我在网上找了几个都用不了。如果方便的话可以分享一下文件吗?

  6. EJIA 說道:

    配置之后启动服务时显示:“本地计算机服务network UPS Tools启动后停止,某些服务在未由其他服务或程序使用时将自动停止”,请问这是什么问题,望回复,谢谢!

    • AskaSu 說道:

      抱歉,我沒遇過這樣的狀況

      目前猜測是不是dll檔不正確

  7. Forever 說道:

    请问是在UPS使用电池的时候就会触发SHUTDOWNCMD命令还是在UPS电量低的时候才会触发呢?

    • AskaSu 說道:

      看你的設定哪一個條件先達到,就會觸發關機

      比如設定
      低電量為40%
      剩餘時間為5分鐘
      當斷電時,看這兩個條件哪一個先觸發到,
      假設定電量先掉到40%,但是剩餘時間還有6分鐘,
      依然會觸發關機程序

      • Gow 說道:

        "低電量為40%
        剩餘時間為5分鐘",在upsmon.conf里设置吗?请问是哪一行命令,文件里不太看得懂,谢谢您!

        • AskaSu 說道:

          在 apcupsd.conf 的設定檔尋找
          BATTERYLEVEL
          MINUTES
          修改這兩個設定到你期待觸發的數值

發表迴響

*