Proxmox VE 与 CyberPower UPS 联动实现自动关机

最近把虚拟化平台换成了 PVE,因为是 Linux 环境所以与之前的 ESXi 相比会比较好实现与 UPS 的联动。

在此介绍两种方法,一种是使用 Network UPS Tools (NUT) 来实现,另一种是使用 CyberPower UPS 官方给出的 PowerPanel Linux 来实现。这篇文章里两种方法都会介绍一下。

方法1:Network UPS Tools (NUT)

NUT 是一款支持很多品牌和型号的开源电源监控软件,其兼容列表可参考此处
由于安装过程比较繁琐,建议参考以下教程来操作
1. DIY HOME SERVER 2021 – Software – PROXMOX – NUT UPS Monitoring
2. Network UPS Tools (NUT) Ultimate Guide
如果你配置的有 Home Assistant 的话在配置好 NUT 服务端和客户端后可以在 Home Assistant 中安装 NUT Integration,这样就不需要配置 NUT Monitoring 了。

方法2:PowerPanel Linux(简易版)

由于 NUT 的安装与配置比较麻烦,不想折腾的话也可以使用 CyberPower UPS 官方的 PowerPanel Linux 软件包来解决。
首先我们先把 UPS 的 USB 端口添加进 VM 中(请不要直接在 PVE 系统中安装第三方软件包,出了安全问题可是要负责任的) 。

接下来前往 CyberPower 官网下载软件包 https://www.cyberpower.com/jp/ja/Product/sku/powerpanel_for_linux#downloads

# Debian 系使用以下命令即可安装
$ sudo dpkg -i file-name.deb
# 安装完成后启动一下服务
$ systemctl enable pwrstatd
$ systemctl start pwrstatd
# 看一下有没有正常连上, 正常的话会显示你的 UPS 的当前信息
$ pwrstat -status

如果你想要调整 pwrstatd 的配置可以参考 ArchWiki 以及 官方用户手册
pwrstatd 会在满足配置的条件时执行 /etc/powerpanel/shutdown.sh
我们可以通过编辑改文件来实现 PVE 的关机
首先在 VM 中创建一个 SSH Key

$ su -i
$ mkdir /root/.ssh
$ chmod 700 /root/.ssh
$ ssh-keygen -t ed25519 -C "PVE-ssh-key"
$ chmod 600 /root/.ssh/id_ed25519
$ vim /root/.ssh/config
Host pve
  HostName 192.168.1.100  //PVE  IP
  User root
  IdentityFile /root/.ssh/id_ed25519
/root/.ssh/config

接下来把生成的 Public key 添加到 PVE 的 authorized_keys 中,执行 ssh pve 测试一下能不能连上,没有问题的话编辑 /etc/powerpanel/shutdown.sh

#!/bin/bash
# systemctl poweroff
ssh pve "poweroff"
/etc/powerpanel/shutdown.sh

这样就可以啦,可以把 UPS 电源拔掉,等到了 pwrstatd 的配置条件(默认应该是断电后 60 秒)后 PVE 应该就会关机了呢。

参考资料

https://www.reddit.com/r/Proxmox/comments/o2rwhl/does_anybody_have_a_good_guide_for_configuring/
https://forum.proxmox.com/threads/cyberpower-power-panel.120376/
https://community.home-assistant.io/t/nut-usb-continous-disconects/231350
https://www.reddit.com/r/homelab/comments/10t3dfb/cyberpower_app_cannot_talk_to_the_ups_on_usb_from/

“Proxmox VE 与 CyberPower UPS 联动实现自动关机”的3个回复

  1. 同使用CPS的UPS,型号CP550JP
    PVE版本7.4,安装了nut,让PVE作为UPS网络服务器
    但是不知道为什么过一段时间之后nut就会与UPS失去连接,先是通信失败,多次通信失败后nut就无响应了…
    这时候只能执行
    upsdrvctl stop
    upsdrvctl start
    来恢复UPS服务
    不知道博主有没有遇到过类似的问题

      1. 还是有同样的问题。。
        可能是收的这个二手UPS有问题,以后有机会买个新的再看看(

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注