我编写了此代码以在主机系统启动时自动启动 KVM 虚拟机,并在主机系统关闭或重新启动时停止虚拟机。
start on startup
start on started networking and started qemu-kvm and started libvirt-bin
stop on runlevel [016]
kill timeout 70
expect fork
pre-start exec /KVM/luc.sh prepara
exec /KVM/luc.sh avvia
pre-stop script
/KVM/luc.sh ferma
/bin/sleep 20
end script
luc.sh 是一个具有以下功能的脚本:
- prepara() - 准备环境
- avvia()-启动 KVM
- ferma()——关闭 KVM
除了sleep
命令之外,它都可以工作。我需要延迟主机系统的关机/重启操作以等待客户机关机完成。换句话说,我想在命令后插入约 20 秒的等待时间/KVM/luc.sh ferma
。看来sleep
upstart 脚本中的调用是异步的。是否可以在 upstart 脚本中进行同步调用?
答案1
是的,不知何故,睡眠对我来说也不起作用(我使用的是 Ubuntu 10.04)。我不确定以下解决方案是否是最好的,但它似乎有效。
创建一个额外的 upstart 任务,例如,post-sleep.conf (为清楚起见添加了日志记录):
description "Sleep when the job finishes" task script echo "Sleeping..." | logger -t "post-sleep-job" /bin/sleep 60s echo "Done sleeping" | logger -t "post-sleep-job" end script
在需要关机后休眠的作业中添加以下内容:
post-stop script start post-sleep end script
使用实例如果多个作业在完全关闭之前需要等待,则在第一个脚本中执行此操作。但是,我认为一个更好、更强大的解决方案是依靠事件。