LS-WVL 使用NUT (Network UPS Tools)監控UPS
運行環境
- LS-WVL刷Debian 12
安裝套件
apt install -y nut
設定
編輯/etc/nut/nut.conf ,修改MODE=netclient,確認權限為root nut
none: Nut 未設定
standalone: 獨立模式, 一般在只有一個 UPS 且只負責本地系統(不提供網路服務)的情況下使用.
netserver: Nut Server.
netclient: 客戶端模式, 只啟動 nut-monitor, 用於連接遠端的 Nut 服務.
root@LS-WVL885:~# cat /etc/nut/nut.conf
...
MODE=netclient
編輯/etc/nut/upsmon.conf,以下範例為當UPS切換到電池後執行upssched調度程序,,確認權限為root nut
#監控的UPS IP 使用者及密碼,模式為slave
MONITOR ups@192.168.1.1 1 monuser secret slave
#系統最少需要多少台 UPS ,通常單一 UPS 系統設1
MINSUPPLIES 1
#偵測到要關機(如 UPS 電池低、FSD)時,upsmon 執行的指令
SHUTDOWNCMD "/sbin/shutdown -h +0"
#每幾秒輪詢 UPS 狀態
POLLFREQ 5
#在告警(例如 ONBATT)時,每幾秒檢查一次
POLLFREQALERT 5
HOSTSYNC 15
#若 15 秒都收不到 UPS 更新資料,就認為 UPS 通訊掛掉
DEADTIME 15
#當系統真的要「切電源」時,會建立這個旗標檔,UPS daemon 看到它後會通知 UPS 關閉輸出電源。
POWERDOWNFLAG /etc/killpower
RBWARNTIME 43200
#若 300 秒都沒有收到 UPS 通訊,就發出「通訊中斷」通知
NOCOMMWARNTIME 300
#關機流程最後等待的秒數
FINALDELAY 5
#NUT自帶調度程序
NOTIFYCMD /sbin/upssched
#UPS切換電池和恢復供電時皆觸發調度程序
NOTIFYFLAG ONBATT EXEC
NOTIFYFLAG ONLINE EXEC
#UPS無回應或恢復觸發調度程序
NOTIFYFLAG COMMOK EXEC
NOTIFYFLAG NOCOMM EXEC
upssched程序的設定檔為/etc/nut/upssched.conf,編輯並確認權限為root nut
#自訂執行腳本位置
CMDSCRIPT /bin/upssched-cmd
#確認以下路徑正確
PIPEFN /var/run/nut/upssched.pipe
LOCKFN /var/run/nut/upssched.lock
#當UPS狀態切換後執行參數
AT ONBATT * EXECUTE onbatt
AT ONLINE * EXECUTE onpower
AT NOCOMM * EXECUTE lost
AT COMMOK * EXECUTE connect
#當UPS切換電池後創建shutdown計時器120秒
AT ONBATT * START-TIMER shutdown 120
#當UPS恢復供電後取消計時器
AT ONLINE * CANCEL-TIMER shutdown
編輯/bin/upssched-cmd,確認權限為root nut和可執行chmod +x,當切換電池後記錄log並啟動shutdown計時器,120秒UPS未恢復供電則關機
#! /bin/sh
case $1 in
shutdown)
echo "$(date): AC Power not restored after 120s, shutting down system." >> /var/log/ups-shutdown.log
sleep 3
sudo /sbin/shutdown -h +0
;;
onbatt)
echo "$(date): AC Power outage, on battery" >> /var/log/ups-shutdown.log
;;
onpower)
echo "$(date): AC Power restored" >> /var/log/ups-shutdown.log
;;
connect)
echo "$(date): Communications with UPS established" >> /var/log/ups-shutdown.log
;;
lost)
echo "$(date): Communications with UPS lost" >> /var/log/ups-shutdown.log
;;
*)
logger -t upssched-cmd "Unrecognized command: $1"
;;
esac
使用visudo,加入nut使用者允許使用shutdown指令
root@LS-WVL885:~# visudo
...
nut ALL=(ALL) NOPASSWD: /sbin/shutdown
建立nut程序可寫入log檔
touch /var/log/ups-shutdown.log
chown root:nut /var/log/ups-shutdown.log
chmod 664 /var/log/ups-shutdown.log
systemctl enable nut-monitor
systemctl start nut-monitor
測試
測試可讀取UPS狀態
root@LS-WVL885:~# upsc ups@192.168.1.1
Init SSL without certificate database
battery.charge: 96
battery.charge.low: 10
battery.charge.warning: 50
battery.date: 2001/09/25
battery.mfr.date: 2023/08/10
battery.runtime: 2636
ups.status: OL CHRG
ups.test.result: No test initiated
ups.timer.reboot: 0
ups.timer.shutdown: -1
ups.vendorid: 051d
測試UPS切換電池,120秒內未恢復供電則會關機和紀錄log
root@LS-WVL885:~# cat /var/log/ups-shutdown.log
Mon Sep 1 01:11:06 AM CST 2025: AC not restored after 120s, shutting down system.
Mon Oct 20 01:14:56 AM CST 2025: AC Power outage, on battery
Mon Oct 20 01:15:11 AM CST 2025: AC Power restored
UPS無回應和恢復時紀錄log
root@test:~# cat /var/log/ups-shutdown.log
Sun Nov 16 04:52:15 PM CST 2025: Communications with UPS lost
Sun Nov 16 04:52:25 PM CST 2025: Communications with UPS established
No comments to display
No comments to display