Назад | Перейти на главную страницу

спать в сценарии выскочки (синхронность выскочки)

Я написал этот код для автоматического запуска виртуальной машины 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 - это сценарий со следующими функциями:

Работает кроме sleep команда. Мне нужно отложить выключение / перезагрузку хост-системы, чтобы дождаться завершения гостевого выключения. Другими словами, я хочу вставить ожидание ~ 20 секунд после /KVM/luc.sh ferma команда. Похоже, что sleep вызов в сценарии выскочки является асинхронным. Можно ли в скрипте выскочки сделать синхронный вызов?

Да у меня почему-то сон тоже не работает (я использую Ubuntu 10.04). Я не уверен, что следующее решение является лучшим, но, похоже, оно работает.

  1. Создайте дополнительную задачу выскочки, скажем, 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
    

Использовать экземпляры в первом скрипте, если нескольким заданиям нужно подождать до полного отключения. Однако я думаю, что еще лучшим и более надежным решением было бы положиться на События.