«

PVE 关机重启时 自动挂起 虚拟机

学长 发布于 阅读:1833 NAS


关机重启时自动挂起虚拟机

不在乎过程的直接到最后面复制最后两段红字就行了

剩下还有关机的时候自动挂起黑群的虚拟机

指令是找到了,后面加不加1都可以,

区别在于--todisk是个布尔值没声明就是默认0,声明了就是1,声明了加1就。。。也可以(官网说明

qm suspend 101 --todisk


官方论坛有人写的pve-hibernate-all 很不错

https://forum.proxmox.com/threads/feature-request-hibernate-vms-on-pve-host-reboot.65529/page-2

写个自动挂起全部的脚本

在/etc/systemd/system/pve-manager.service 服务的stop中加入执行,这样当停止pve manager自动就会执行挂起全部

mkdir  /var/lib/vz/snippets

因为没有这个文件夹

cat > /var/lib/vz/snippets/pve-hibernate-all <<EOF

qm list | grep running | awk -F '[^0-9]*' '\$0=\$2' | while read -r vm_id; do qm suspend \$vm_id --todisk 1; done;

EOF

添加执行权限

chmod 755 /var/lib/vz/snippets/pve-hibernate-all

添加到 /etc/systemd/system/pve-manager.service 中

ExecStop=/var/lib/vz/snippets/pve-hibernate-all

添加该行

最好在其他的stop前面,不然执行顺序没法被保证

老哥给的参考

[Service]
Environment="PVE_LOG_ID=pve-guests"
ExecStartPre=-/usr/share/pve-manager/helpers/pve-startall-delay
ExecStart=/usr/bin/pvesh --nooutput create /nodes/localhost/startall
ExecStop=/var/lib/vz/snippets/pve-hibernate-all
ExecStop=-/usr/bin/vzdump -stop
ExecStop=/usr/bin/pvesh --nooutput create /nodes/localhost/stopall

具体操作在shell或者ssh中输入

vi /etc/systemd/system/pve-manager.service

找到21行按o添加行并编辑

输入或者粘贴

ExecStop=/var/lib/vz/snippets/pve-hibernate-all

按esc键输入:wq保存并关闭

记得切换输入法,最起码百度中文输入的时候按不上去

systemctl daemon-reload

重新加载systemd cache

目前直接运行shell显示

awk: not an option: -bash=

https://github.com/gvalkov/tailon-legacy/issues/62

给出的是切换awk

dpkg -l |grep awk

还真是mawk,那就切换下awk到gawk,本来想换成写入脚本就是mawk一样不可以。。。

apt-get install gawk && apt-get remove mawk

还是有错。。。应该是 awk -F 后面没有空格导致的???

真正问题是cat写入文件对$符号处理问题导致的因为vi去看了。。。$被替换了

呃。。。重启并不会执行挂起。。。挂在这个点貌似。。。不起作用

ExecStop=/usr/bin/pvesh --nooutput create /nodes/localhost/stopall 

行删除试试,毕竟挂起了就不用关机了,也是执行不到。。。

要不然改poweroff 还有reboot指令???等待几分钟执行完再重启???

sleep 秒数

确定开关机的位置用脚本代替

mv /usr/sbin/reboot /usr/sbin/reboot_now

mv /usr/sbin/poweroff /usr/sbin/poweroff_now

等到直到没有running

mkdir /var/lib/vz/snippets/

cat > /var/lib/vz/snippets/pve-hibernate-all <<EOF
qm list | grep running | awk -F '[^0-9]*' '\$0=\$2' | while read -r vm_id; do qm suspend \$vm_id --todisk 1; done;
while qm list | grep running>/dev/null; do sleep 1; done; 
EOF
cat > /usr/sbin/poweroff <<EOF
/var/lib/vz/snippets/pve-hibernate-all
/usr/sbin/poweroff_now
EOF
cat > /usr/sbin/reboot <<EOF
/var/lib/vz/snippets/pve-hibernate-all
/usr/sbin/reboot_now
EOF
chmod 777 /usr/sbin/reboot  /usr/sbin/poweroff /var/lib/vz/snippets/pve-hibernate-all

每次系统更新完得重新添加。。。因为这些指令很有可能被重置

嗯。。。原来的关机和重启就是777只是link到systemctl我也不知道怎么做到的。。。

如果挂起出错会锁住虚拟机解锁

qm unlock 101


扫描二维码,在手机上阅读