利用python libvirt api以阻塞的方式启动和停止qemu kvm机器

virsh-start-stop的Python项目详细描述


virsh开始-停止

我想用systemd单元启动和停止单个libvirt虚拟机。

从单元调用virsh start %ivirsh 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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java GridBagLayout不填充区域   java Memozied Fibonacci未运行与常规Fibonacci解决方案   Java Web启动未启动问题   Java中异常和if-then的区别   java从命令提示符运行批处理文件获取错误   socket在Java中验证SSL证书的公共名称   如何在JAVA中检查字符串数组中的相等字   用java语言将音频文件转换成文本文件的语音识别   java为什么foo(1,2,3)没有传递给varargs方法foo(对象…)作为整数[]   java通过蓝牙将奇怪的数据从Arduino传输到Android   java ContainerRequestFilter获取空entitystream   java如何从安卓 studio中删除不兼容类型错误   基本Java错误   在Spring引导中使用REST API时发生java错误   javascript通过从SQL查询派生的URL打开页面