在 Proxmox 上设置 NUT
I’m happy to translate the article for you, but I’ll need the text you’d like translated. Could you please paste the content (or the portion you want translated) here? I’ll keep the source line and all formatting exactly as you specify.
Source: …
1. UPS 设置
1.1 UPS 连接
确保 UPS 已经接入网络。此示例使用 APC SRT3000XLI 3000VA 230V 在线 UPS,并已安装 NMC(网络管理控制) 模块。完整教程请参见此处。
1.2 时区
- 打开 Configuration > General > Date/Time > Mode 菜单。
- 选择 NTP Pool →
https://www.ntppool.org/en/zone/id。

1.3 SNMPv3
-
启用 SNMPv3:Configuration → Network → SNMPv3 > Access,勾选 Enable。

-
创建用户配置文件:Configuration → Network → SNMPv3 > User Profile。从四个默认配置文件中选择一个。

1.4 低电池延迟
在 Configuration > Shutdown → Low Battery Duration 中将延迟设置为 20 秒。

2. Proxmox 主机设置
2.1 安装 NUT 包
apt update
apt install -y snmp nut nut-snmp
2.2 配置 NUT 模式
编辑文件 /etc/nut/nut.conf 并将 MODE 行改为:
MODE=standalone
2.3 配置 UPS(ups.conf)
nano /etc/nut/ups.conf
添加(或修改)以下块,使用已在 UPS 上创建的用户配置文件:
[apcsrt]
driver = snmp-ups
port = 10.0.3.136 # UPS IP
snmp_version = v3
secLevel = authPriv
secName = apc_agent3
authProtocol = SHA
authPassword = farmcenter1009
privProtocol = AES
privPassword = farmcenter1009
2.4 创建 NUT 用户(upsd.users)
nano /etc/nut/upsd.users
在文件最底部添加:
[monuser]
password = passwordbebas
upsmon primary
按
Ctrl+W搜索,随后Ctrl+V粘贴(如果使用nano编辑器)。
2.5 配置监控(upsmon.conf)
nano /etc/nut/upsmon.conf
修改 NOTIFYCMD 和 NOTIFYFLAG 部分:
# Example:
# NOTIFYCMD /usr/bin/notifyme
+NOTIFYCMD /usr/local/bin/nut-notif.sh
NOTIFYFLAG ONBATT EXEC
NOTIFYFLAG LOWBATT EXEC
NOTIFYFLAG ONLINE EXEC
在文件最底部添加 MONITOR 行:
MONITOR apcsrt@localhost 1 monuser passwordbebas primary
确保使用的密码与 /etc/nut/upsd.users 中定义的相同。
2.6 重启 NUT 服务
systemctl restart nut-driver nut-server nut-monitor
2.7 验证与 UPS 的连接
upsc apcsrt@localhost
显示关键参数:
upsc apcsrt@localhost | egrep "battery.charge|battery.runtime|ups.status|battery.runtime.low|battery.runtime"
如果输出中出现这些数值,说明 NUT 已成功连接到 UPS。
2.8 通知脚本(/usr/local/bin/nut-notif.sh)
创建文件 /usr/local/bin/nut-notif.sh(确保具有执行权限),内容为向 Telegram 发送消息的脚本。示例:
#!/bin/bash
# nut-notif.sh – 向 Telegram 发送 UPS 通知
# ==== CONFIGURATION ====
TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
CHAT_ID="YOUR_TELEGRAM_CHAT_ID"
# =======================
EVENT=$1 # ONBATT、LOWBATT、ONLINE 等
MESSAGE="⚡ UPS ${EVENT} 于 $(date '+%Y-%m-%d %H:%M:%S')"
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="${MESSAGE}" >/dev/null
chmod +x /usr/local/bin/nut-notif.sh
将
YOUR_TELEGRAM_BOT_TOKEN和YOUR_TELEGRAM_CHAT_ID替换为对应的实际值。
3. 结语
通过上述步骤,Proxmox 将:
- 通过 NUT 实时监控 UPS 状态。
- 当状态发生变化(ON BATT、LOW BATT、ONLINE)时,向 Telegram 发送通知。
- 当 UPS 处于 Low Battery(低电量)状态时,自动关机。
希望本教程对您有帮助!如果有任何问题或疑问,请留下评论或通过 Telegram 联系我。 🚀
Bash 脚本用于向 Telegram 发送 UPS 通知
以下是一个示例 Bash 脚本,可用于通过已在 BotFather 创建的机器人,将 UPS 状态(ON BATTERY、LOW BATTERY、ONLINE)通知发送到 Telegram。
#!/bin/bash
# ------------------------------------------------------------------
# Setup variabel
# ------------------------------------------------------------------
TOKEN="6495733192:AAEiztfp_b6JoZB7uUWhpZV89KbpVQou_34"
CHAT_ID="-1001768856329"
TOPIC_ID="53038"
EVENT="$NOTIFYTYPE"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
# ------------------------------------------------------------------
# Fungsi untuk mengirim pesan ke Telegram
# ------------------------------------------------------------------
send() {
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d message_thread_id="${TOPIC_ID}" \
-d parse_mode=HTML \
--data-urlencode text="$1"
}
# ------------------------------------------------------------------
# Buat trigger EVENT dari upsmon.conf
# ------------------------------------------------------------------
case "$EVENT" in
ONBATT)
MSG=$(printf "UPS ON BATTERY \n\n%s" "$DATE")
;;
LOWBATT)
MSG=$(printf "UPS LOW BATTERY \n\n%s\nProd server Graceful Shutdown" "$DATE")
;;
ONLINE)
MSG=$(printf "UPS ONLINE \n\n%s" "$DATE")
;;
*)
exit 0
;;
esac
# ------------------------------------------------------------------
# Panggil fungsi dengan parameter $MSG
# ------------------------------------------------------------------
send "$MSG"
Catatan:
绿色部分(变量TOKEN)是从 Telegram BotFather 获取的令牌。请确保该令牌正确且您的机器人已完成设置。
脚本测试方法
运行上述脚本时,设置环境变量 NOTIFYTYPE 为想要测试的事件。
NOTIFYTYPE=ONLINE UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
NOTIFYTYPE=ONBATT UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
NOTIFYTYPE=LOWBATT UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
如果一切配置正确,您将收到 Telegram 消息,内容对应每个事件中定义的文本。
高级测试
要进行真实测试,拔掉 UPS 电源并等待 UPS 进入 Low Battery(低电量)模式。如果配置正确,服务器将自动执行在 NUT(Network UPS Tools)中设置的关机命令。
祝您测试顺利,祝使用愉快!