利用python libvirt api以阻塞的方式启动和停止qemu kvm机器
virsh-start-stop的Python项目详细描述
virsh开始-停止
我想用systemd单元启动和停止单个libvirt虚拟机。
从单元调用virsh start %i
或virsh stop %i
不会切断它。
这是因为关机时它不会阻塞,所以你不知道机器是否真的关机,除非你
这一切都在bash脚本中,并采用了一种沿着virsh list | grep myVM
行的脏方法。
启动一台机器也是具有挑战性的,因为^ {CD4>}使用退出状态1来处理多个错误条件, 包括“机器已经在运行”。
此脚本的目的是通过libvirt python绑定启动/停止给定的虚拟机 很容易从systemd中消费。 这意味着我试着优雅地处理“已经在运行”的情况。 关机以阻塞方式进行,可以选择从机器上拔下虚拟电源线以防 它无视我们的礼貌要求。
我还利用这个机会每秒发出关机请求,直到机器停机。 当虚拟机运行libvirt guest代理时,这应该是不必要的,但有时它可以帮助 说服windows真正关闭而不是问“真的关闭?”在虚拟控制台上没有人 单击“确定”。
系统单元文件示例:
[Unit]
Description=virsh start / stop %i
Requires=libvirtd.service
After=libvirtd.service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/opt/vollmerhaus.net/venv/bin/virsh-start-stop --machine %i --state started
ExecStop=/opt/vollmerhaus.net/venv/bin/virsh-start-stop --machine %i --state stopped --timeout 80
[Install]
WantedBy=default.target