在新贵脚本中睡眠(新贵同步)

fra*_*sco 5 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
Run Code Online (Sandbox Code Playgroud)

luc.sh 是一个具有以下功能的脚本:

  • 准备() - 准备环境
  • avvia() - 启动 KVM
  • ferma() - 关闭 KVM

除了sleep命令之外它都可以工作。我需要延迟主机系统的关闭/重启操作以等待来宾关闭完成。换句话说,我想在/KVM/luc.sh ferma命令后插入约 20 秒的等待。sleep新贵脚本中的调用似乎是异步的。是否可以在 upstart 脚本中进行同步调用?

小智 2

是的,不知何故,睡眠对我来说也不起作用(我使用的是 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在关机后需要休眠的作业中添加以下内容:

    post-stop script
        start post-sleep
    end script
    
    Run Code Online (Sandbox Code Playgroud)

如果多个作业需要在完全关闭之前等待,请使用第一个脚本中的实例。然而,我认为更好、更强大的解决方案是依赖events