O.S.:FreeBSD 7.1-RELEASE amd64
Version:nut 2.4.1_6
因為買了一個飛瑞 C-1000S 的 on-line UPS,就想說用來裝在 FreeBSD 的伺服器上。可是飛瑞附的 WinPower 只有 for 4.x 版,又是 i386 的,所以只好自己弄囉。不過 nut 的說明文件其實省略很多地方(比較偏理論,有些細節也沒有說明),而且飛瑞的 driver 其實是另外用別人的,所以設定上複雜了點。
- 安裝 nut(如果沒有安裝 snmp,還會順便幫你安裝)
- 設定 nut(範例檔、官方說明文件)
- rc.conf
- ups.conf (先設定 UPS 的相關資訊)
- upsd.conf (設定 upsd 服務)
- upsd.user (設定可以存取的使用者)
- upsmon.conf (UPS 的動作)
- 系統關機順序
- NOTIFYCMD (upsmon.conf 內通知的命令)
- upssched.conf(計時器設定)
- upssched-cmd
- MRTG 設定
nut_enable="YES" nut_upslog_enable="YES" nut_upsmon_enable="YES"
[C1000S] // snmp 用來辨識 UPS 的名稱 driver = blazer_ser // UPS Driver(如果沒選好,就有很多功能不能用) port = /dev/cuad0 // RS-232 COM-port 1 desc = "Phoenixtec C-1000S" //就只是描述
LISTEN 127.0.0.1 3493 // 基本上不用什麼設定,預設就只有這一行開啟的 port(因為 acl 那些設定都不能用了)
# Supervision user [admin] // 使用者名稱 password = mypass // 使用者密碼 allowfrom = localhost // 允許存取的來源 actions = SET // SET:可以更改 UPS 的參數。FSD:可以讓 UPS 強制關機 instcmds = ALL // 可以執行:面板測試、電池測試、校正 # Protection user [monuser] password = mypass allowfrom = localhost upsmon master // UPS 模式為 Master
MONITOR C1000S@localhost 1 monuser mypass master // 先設定控制所需要的 UPS 名稱、使用者資訊 SHUTDOWNCMD "/sbin/shutdown -h +0" // 關機的命令 NOTIFYCMD "/usr/local/etc/nut/upssched-cmd" // 通知的命令(這個設定很複雜,下面會再介紹) NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC // UPS on battery 時,要執行的動作(寫入紀錄檔、通知系統內的所有使用者、執行通知命令) NOTIFYFLAG ONLINE SYSLOG+EXEC // UPS 回覆 on line 時,執行寫入紀錄檔和執行通知命令
1. The UPS goes on battery // 由 UPS 電池供電 2. The UPS reaches low battery (a "critical" UPS) // UPS 變成低電位 3. The upsmon master notices and sets "FSD" - the "forced shutdown" flag to tell all slave systems that it will soon power down the load. // upsmon 會送出 "FSD" 標籤給所有的 UPS (在 upsmon 設定) 4. generates a NOTIFY_SHUTDOWN event // 產生 NOTIFY_SHUTDOWN 的事件 5. waits FINALDELAY seconds - typically 5 // 等待一定的秒數(在 FINALDELAY 設定) 6. creates the POWERDOWNFLAG file - usually /etc/killpower // 產生 POWERDOWNFLAG 的檔案,準備將 UPS 關機 7. calls the SHUTDOWNCMD // 執行 SHUTDOWNCMD
NOTIFYCMD 會在系統需要通知的時候,依照 upsmon.conf 的設定進行通知: <notify type>:通知模式的設定(詳細的在 upsmon.conf 有) NOTIFYMSG <notify type> "message":設定什麼 notify type 要送出什麼訊息,通知的訊息會變成 NOTIFYCMD 執行時候的參數。 NOTIFYFLAG <notify type> <flag>[+<flag>]:設定 notify flag 的警示方式。(可以設定系統紀錄+全系統通知+執行 NOTIFYCMD) 所以 NOTIFYCMD 可以直接設定執行檔,但是這樣就不能有計時器的設定了(upssched.conf)。 計時器的設定可以讓你在市電中斷的時候,開始計時,一段時間後就執行某些命令。 如果要有計時器的設定的話,NOTIFYCMD 要設定成: NOTIFYCMD /usr/local/sbin/upssched
CMDSCRIPT /usr/local/etc/nut/upssched-cmd //事件的計時器完成時,要執行的命令(會以計時器的名稱當成參數) PIPEFN /etc/uucp/upssched.pipe //幫助計時的檔案 LOCKFN /etc/uucp/upssched.lock //幫助計時的檔案 上面這三行一定要在設定計時器的語法之上,幫助計時的檔案一定要在同一個目錄內,也要讓 nut 的使用者可以寫入(不過不要讓別的使用者可以存取) AT <notifytype> <upsname> <command> //計時器的標準語法。 upsname 為 * 就是代表所有的 ups。 # 當 ONBATT (停電時)就啟動名為 shutdown 的計時器,倒數 180 秒 AT ONBATT * START-TIMER shutdown 180 # 當 ONLINE (電來了)就停止名為 shutdown 的倒數計時 AT ONLINE * CANCEL-TIMER shutdown # 其他設定 (依照 notifytype 執行 CMDCRIPT) AT ONBATT * EXECUTE ups-ob //因為我怎麼試,upsmon 都沒辦法把通知的訊息直接當參數送給 CMDSCRIPT,所以只好土法煉鋼直接靠這邊送了 AT ONLINE * EXECUTE ups-ol AT LOWBATT * EXECUTE lowbatt AT REPLBATT * EXECUTE replacebatt
#!/bin/sh case $1 in shutdown) /bin/echo "`date "+%Y-%m-%d %H:%M:%S"` 市電異常超過三分鐘,強迫關機" > /tmp/sms_ups.txt /usr/local/etc/nut/sms_alarm.php //這個是簡訊通知的程式 /usr/local/libexec/nut/upsdrvctl shutdown //將 UPS 關機(因為我的 UPS 有設定延遲 30 秒關機) /bin/echo "`date "+%Y-%m-%d %H:%M:%S"` UPS 關機指令已下達,主機開始關機" > /tmp/sms_ups.txt /usr/local/etc/nut/sms_alarm.php /usr/local/sbin/upsmon -c fsd //這個指令下完,主機就會關機了 ;; "ups-ob") /bin/echo "`date "+%Y-%m-%d %H:%M:%S"` 市電異常,由 UPS 電池供電中" > /tmp/sms_ups.txt /usr/local/etc/nut/sms_alarm.php ;; "ups-ol") /bin/echo "`date "+%Y-%m-%d %H:%M:%S"` 市電恢復, UPS 正常運作" > /tmp/sms_ups.txt /usr/local/etc/nut/sms_alarm.php ;; *) logger -t upssched-cmd "Unrecognized command: $1" ;; esac
Target 設定: Target[ups]: `/usr/local/bin/upsc C1000S@localhost battery.voltage | /usr/bin/awk '{print $1*10}' && /usr/local/bin/upsc C1000S@localhost input.voltage | /usr/bin/awk '{print $1*10}'`
- 啟動 nut
- 相關命令
- 紀錄檔: /var/log/ups.log
- UPS 資訊:
- UPS 可用命令:
- 更改 UPS 參數:
#/usr/local/bin/upsc C1000S@localhost battery.voltage: 2.26 //電壓偵測怪怪的,應該是 driver 的關係 beeper.status: disabled driver.name: blazer_ser driver.parameter.pollinterval: 2 driver.parameter.port: /dev/cuad0 driver.version: 2.4.1 driver.version.internal: 1.51 input.frequency: 60.0 input.voltage: 116.7 input.voltage.fault: 116.7 output.voltage: 110.9 ups.delay.shutdown: 30 //延遲關機 ups.delay.start: 180 //市電回覆後,延遲開機 ups.load: 0 ups.status: OL ups.temperature: 40.0 ups.type: online
#/usr/local/bin/upscmd -l C1000S@localhost Instant commands supported on UPS [C1000S]: beeper.toggle - Toggle the UPS beeper load.off - Turn off the load immediately load.on - Turn on the load immediately shutdown.return - Turn off the load and return when power is back shutdown.stayoff - Turn off the load and remain off shutdown.stop - Stop a shutdown in progress test.battery.start - Start a battery test test.battery.start.deep - Start a deep battery test test.battery.start.quick - Start a quick battery test test.battery.stop - Stop the battery test
#upsrw -u monuser -p mypass C1000S@localhost 如果可以更改的話,會有一些參數出現(不能更改或是 Driver 錯誤的話,就不會有訊息出現) [ups.test.interval] Interval between self tests Type: ENUM Option: "1209600" Option: "604800" SELECTED Option: "0"
#cd /usr/ports/sysutils/nut #make install clean
#/usr/local/etc/rc.d/nut start
Please follow and like us:
0 comments on “[FreeBSD] 飛瑞 C-1000S UPS 用 nut 監控”
1 Pings/Trackbacks 於 "[FreeBSD] 飛瑞 C-1000S UPS 用 nut 監控"
[...] 之前一直都是用 nut 來監控飛瑞的 C-1000S UPS,不過換了一個新的主機板之後,因為沒有 RS232 的介面,所以只好用 USB 轉 RS232 的線來監控。也因此之前的 driver 設定就不能用了(其他的功能則是取決於 driver 能獲得的資訊而定)。 [...]