Ввиду неспособности 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
Отправить комментарий