Skip to main content

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

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

#當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                                    
    ;;  
  *)
    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