linux - 关闭所有正在运行的虚拟机并再次启动自动启动机器

标签 linux ubuntu kvm

我想创建一个简单的备份脚本来关闭所有正在运行的虚拟机,然后复制图像文件并再次启动自动启动虚拟机。听起来很简单,但是当我关闭虚拟机(使用“virsh shutdown VMNAME”)时,脚本不会等待完全关闭。我可以停止 KVM 服务,导致所有 VM 关闭,复制 VM 文件并重新启动吗?这样,只有自动启动的虚拟机才会启动。听起来像是停止 MySQL/MariaDB,备份文件然后重新启动。人们可能会建议 LVM 快照,但目前这台服务器还不可能。

最佳答案

我遇到了同样的问题,因此我做了一个小的 if 语句来检查 /var/log/libvirt/qemu/domain.com.log 来查看日志中是否发出了 reason=shutdown ,它充当域是否实际关闭的代理。如果条件失败,脚本将向您发送电子邮件,如果成功,条件将继续执行您的备份脚本和/或调用另一个脚本。它还针对具有多个虚拟机的循环/阵列进行配置。像这样的东西应该有效:

#!/bin/bash
DATE=`date +"%Y%m%d-%H:%M:%S"`
IMG="guest1.qcow2 guest2.qcow2"

for i in $IMG;
do
virsh shutdown $i
#Adjust to what you expect is a reasonable shutdown time
sleep 2m

if
tail -n -2 /var/log/libvirt/qemu/$i.log | grep "reason=shutdown"
then

#enter your backup script inline here, or call it
/bin/bash /usr/local/bin/backup-script.sh

else
#notify of failure
echo "The VM failed to shutdown or is already off at $(date) so I can't run your backup script" | mail -s "[backup-failed]-$(hostname -f)-$(date)" alert@domain.com

fi
done

没有完美的脚本,您仍然需要进行定期维护以确保其正常运行。我还要指出my solution虽然很原始,但工作可靠。然而,对于路人来说,我会注意到OP问题似乎与this question重复。其中有一些非常优雅的建议,涉及如何确保和/或等待虚拟机关闭后再执行脚本。我有一个基于其中之一的不同脚本 here如果对路人有帮助的话。

关于linux - 关闭所有正在运行的虚拟机并再次启动自动启动机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47608330/

相关文章:

linux - Perl:关闭信号处理程序中的子进程管道挂起?

php - 用 phpseclib 重启 nic 挂起整个 apache

c - 用 C 绘制图表 (ubuntu)

php - 并发读写文件

python - Pylucene 4.9.0 Ubuntu 14.04 安装 ImportError

android - 是否可以为 ARM 运行 GoogleTV 模拟器?

命令行字辅助

json - 如何在 bash 中用\"替换 JSON 文件中的引号?

system - 以编程方式从快照运行 QEMU VM 实例

ubuntu - 当我有 VM 时,如何在 Ubuntu 12.04 上安装 KVM