Ввиду неспособности libvirt-bin
корректно отключать гостевые хосты при выключении/ребуте сервера, решил написать свой скрипт
#!/bin/shСохраняем скрипт в файл «
### BEGIN INIT INFO
# Provides: kvm-shutdown
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Shutdown Guest KVM Hosts
# Description: Shutdown Guest KVM Hosts
### END INIT INFO
# Author: Князь <demiurg (at) propheta.ru>
#
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Shutdown Guest KVM Hosts"
NAME=kvm-shutdown
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "/usr/bin/virsh" ] || exit 0
[ -S "/var/run/libvirt/libvirt-sock" ] || exit 0
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
export LANG=C
#
# Function that stops the daemon/service
#
virsh_list()
{
virsh list 2>/dev/null | grep -E 'running$' | awk '{ print $2 }'
}
do_stop()
{
LIST=$(virsh_list)
for i in $LIST;
do
virsh shutdown $i 1>/dev/null 2>/dev/null
echo
echo -n "Shutdown $i ";
while [ "$(virsh_list | grep $i)" ];
do
echo -n '.'
sleep 2
done;
done;
if [ "$LIST" ]; then echo; fi;
}
case "$1" in
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Activating $DESC" "$NAME"
do_stop
case "$?" in
0|1)
[ "$VERBOSE" != no ] && log_end_msg 0
break
;;
2)
[ "$VERBOSE" != no ] && log_end_msg 1
break
;;
esac
break
;;
*)
echo "Usage: $SCRIPTNAME stop" >&2
exit 3
;;
esac
/etc/init.d/kvm-shutdown
» и делаем его исполняемым$ sudo chmod +x /etc/init.d/kvm-shutdownСоздаем символические ссылки в
rc0
, rc1
, rc6
$ sudo ln -s ../init.d/kvm-shutdown /etc/rc0.d/K19kvm-shutdownПрефикс
$ sudo ln -s ../init.d/kvm-shutdown /etc/rc1.d/K19kvm-shutdown
$ sudo ln -s ../init.d/kvm-shutdown /etc/rc6.d/K19kvm-shutdown
K19
выбран для того, чтобы скрипт запускался перед «/etc/init.d/libvirt-bin
» (префикс K20
)
2 комментария:
Вот это то, что я искал!!!! Респект!!! А не подскажешь следующий момент - точно то же самое, но для перезапуска сети? У меня, к примеру, гости хостятся на Debian Lenny и к сети привязаны через бридж. При попытке на хостовой системе перегрузить сетку /etc/init.d/networking restart сеть намертво умирает в гостевом виндосе... Помогает перезапуск libvirt /etc/init.d/libvirt-bin restart Что делать?
лучше
update-rc.d kvm-shutdown defaults 19 19
Отправить комментарий