Proxmox VE 設置NUT自動斷電關機 --- > 本範例以 Back-UPS ES 550G USB介面做示範 > PVE基於 debian系統,安裝後還是要改一些地方比較符合PVE情境 ### 注意事項 PVE在上層執行host關機的時候, 基本上會觸發GuestVM關機訊號,執行關機程序。 能接受關機訊號的只有有安裝qemu agent的GuestOS, 若Guest VM沒有安裝或不支援qemu agent,會因超時而被強制關機。 強制關機就多少對應用有風險,這就要尋求別的其他做法了。 只是不過過舊的Windows或Linux基本上都支援安裝qemu agent。 所以不太建議過時系統導入PVE。 ### 安裝套件 apt update apt install nut nut-client nut-server ### 設定 standalone 模式 nano /etc/nut/nut.conf MODE=standalone ### 確認USB參數 ### 接上USB ##### lsusb 系統有認到USB有裝置 lsusb #本例中會看到,確認USB有在系統 Bus 001 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power Supply ##### 下指令得到正確的設置參數 nut-scanner -U #得到如下 [nutdev1] driver = "usbhid-ups" port = "auto" vendorid = "051D" productid = "0002" product = "Back-UPS ES 550G FW:843.K4 .D USB FW:K4" serial = "XXXXXXXXXXXX" vendor = "APC" bus = "001" ##### 設定UPS連接參數 nano /etc/nut/ups.conf #剛剛找到的參數,照抄抄進去設定,這裡重新定義名稱 nutdev1 改為 apc [apc] driver = "usbhid-ups" port = "auto" vendorid = "051D" productid = "0002" product = "Back-UPS ES 550G FW:843.K4 .D USB FW:K4" serial = "XXXXXXXXXXXX" vendor = "APC" bus = "001" ### 確認剛剛的設定有讀取到UPS systemctl restart nut-server systemctl restart nut-monitor upsc apc #如果成功會讀取到UPS數據 ### 追加連線驗證(密碼請自行定義) nano /etc/nut/upsd.users #在文件最尾空白處追加,可自訂password [monuser] password = upspass upsmon master ### 設定 nut monitor參數 nano /etc/nut/upsmon.conf #註解預設SHUTDOWNCMD 改為PVE關機行為 #SHUTDOWNCMD "/sbin/shutdown -h +0" SHUTDOWNCMD "/usr/bin/systemctl poweroff" #文件最尾追加,注意!MONITOR跟 upsd.users 的設置內容有關 RUN_AS_USER root MONITOR apc@127.0.0.1 1 monuser upspass master NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC NOTIFYCMD /sbin/upssched ### 設定關機行為 範例是60秒觸發,60秒內復電取消 nano /etc/nut/upssched.conf #寫在文件最尾端 PIPEFN /var/run/nut/upssched.pipe LOCKFN /var/run/nut/upssched.lock AT ONBATT * START-TIMER shutdown 60 AT ONLINE * CANCEL-TIMER shutdown ### 關機行為的script修改為符合需求的設置 > 有些預設設置我改掉了,那些用不太到, > mail 基本上沒使用到內建mailbox > touch 的部分基本上是用來連動別的設計的行為 > touch的預設值是沒實質需要的範例,所以都取消 nano /bin/upssched-cmd case $1 in shutdown) logger -t upssched-cmd "NUT shutdown" # 這裡是60秒後會做的事情,如果還有什麼要做寫在這裡 # 自定策略在關機前寫好 # 例如先跑Guest關機,再跑host關機,不要讓所有VM同時跑關機的作法 # 注意,qm shutdown 是指定的ID狀態進入未運行了 才算結束 # 所以以下範例是第一個關機到狀態為運行才sleep 3 # 不是正在關機的時候就接著跑sleep 3 # qm shutdown <id> # sleep 3 # qm shutdown <id> # sleep 3 # 最後就是執行關機 systemctl poweroff ;; onbattwarn) echo "The UPS has been on battery for awhile" # Create a flag-file on the filesystem, for your own processing #/usr/bin/touch /some/path/ups-on-battery ;; ups-back-on-power) logger -t upssched-cmd "NUT back on power" # Delete the flag-file on the filesystem #/bin/rm -f /some/path/ups-on-battery ;; upsgone) logger -t upssched-cmd "The communication with UPS has been gone for awhile" ;; *) logger -t upssched-cmd "Unrecognized command: $1" ;; esac ### 最後重啟服務,拔掉UPS電源,剛拔掉會出現 systemctl restart nut-server systemctl restart nut-monitor #拔掉UPS電源,剛拔掉會出現下面訊息, Broadcast message from root@DennisPVE (somewhere) (Tue May 27 18:12:27 2025): UPS apc@127.0.0.1 on battery # 依照此流程設計,如果60秒沒復電,就會跳出關機訊息,然後執行關機了 The system will power off now! #如果60秒內復電,會出現此訊息,就不會觸發關機 Broadcast message from root@DennisPVE (somewhere) (Tue May 27 18:12:37 2025): UPS apc@127.0.0.1 on line power
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up