PVE电源开关启动指定虚拟机
1-BIOS设定,开启ACPI
这块没法截图,每块主板的设定也不一样,总之一个原则:电源,节能里面有ACPI的尽量都打开,设定为由OS自动管控。我的主板是铭瑄MS-C Farm B660i,记得有好几个地方设定,我是提前都打开了。
2-屏蔽默认电源按钮事件
修改logind.conf
使用PVEweb界面或任意ssh工具连上pve,修改logind.conf。这一步修改完,你按电源按键,就不会自动关闭PVE宿主机了。 注意,我只在PVE8.2下实践,其他版本应该类似。这一步如果没有这个文件,那就直接跳转到下一步。
#先备份
cp /etc/systemd/logind.conf /etc/systemd/logind.conf.bak
#编辑
nano /etc/systemd/logind.conf
文件内容如下,注意前面没有#的行是修改的结果,就是设置 HandlePowerKey=ignore和PowerKeyIgnoreInhibited=no。 这两个值原本都是off。 看了这么多设置项,你们应该有所猜测,如果有reset按钮,或者是笔记本合上盖子,应该也能屏蔽掉把。
[Login]
HandlePowerKey=ignore
PowerKeyIgnoreInhibited=no
重启服务和系统
systemctl restart systemd-logind
reboot
3-监听获取电源按钮事件ID
安装ACPI支持
apt install acpid acpi-support
如果报依赖冲突,没安装成功,请安装aptitude解决
监听电源按钮事件
执行acpi_listen,然后按下电源按钮
acpi_listen
#按下电源按钮,不用担心会关闭电脑。不出意外,会有下面的反馈
root@pve:~# acpi_listen
button/power PBTN 00000080 00000000
button/power PBTN 00000080 00000000
button/power LNXPWRBN:00 00000080 00000032
这里00000080就是id
4-拦截并自定义电源按钮事件
编辑ACPI事件文件
编辑ACPI事件
nano /etc/acpi/events/powerbtn
黏贴一下内容: 根据上一步监听的内容来修改
event=button/power PBTN 00000080 00000000
action=/etc/acpi/power_btn.sh
编写关机按键触发的脚本,即上一步的的power_btn.sh
nano /etc/acpi/power_btn.sh
脚本内容如下,可以按需修改,这里的102就是虚拟机的id
#!/bin/bash
output=$(qm status 102)
if [[ $output == "stopped" ]]; then
qm start 102
else
qm status 102
fi
如果要按电源按钮还可以关机,则脚本需要修改成下面的样子。
qm shutdown 这部分,如果不生效,可以改成 qm stop
#!/bin/bash
output=$(qm status 102)
if [[ $output == "running" ]]; then
qm shutdown 102
else
qm start 102
fi
赋予执行权限
chmod +x /etc/acpi/power_btn.sh
重启acpi服务
systemctl restart acpid
5-虚拟机安装 agent
对按下按钮开机来说,这一步不是必须的。要电源按钮关机,还需要再虚拟机里面安装QEMU-guset-agent。 对于Windows来说,在https:/ / Index of
/groups/virt/virtio-win/direct-downloads,可以下载,在iso里面可以找到agent。windows就能响应宿主机PVE发出的关机命令了。
安装后,在虚拟机的选项界面,就可以看到启用了agent