Я написал этот код для автоматического запуска виртуальной машины 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). Я не уверен, что следующее решение является лучшим, но, похоже, оно работает.
Создайте дополнительную задачу выскочки, скажем, 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
Использовать экземпляры в первом скрипте, если нескольким заданиям нужно подождать до полного отключения. Однако я думаю, что еще лучшим и более надежным решением было бы положиться на События.