在 upstart 脚本中睡眠(upstart 同步)

在 upstart 脚本中睡眠(upstart 同步)

我编写了此代码以在主机系统启动时自动启动 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。看来sleepupstart 脚本中的调用是异步的。是否可以在 upstart 脚本中进行同步调用?

答案1

是的,不知何故,睡眠对我来说也不起作用(我使用的是 Ubuntu 10.04)。我不确定以下解决方案是否是最好的,但它似乎有效。

  1. 创建一个额外的 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
    
  2. 在需要关机后休眠的作业中添加以下内容:

    post-stop script
        start post-sleep
    end script
    

使用实例如果多个作业在完全关闭之前需要等待,则在第一个脚本中执行此操作。但是,我认为一个更好、更强大的解决方案是依靠事件

相关内容