KVM корректная остановка виртуальных машин
Материал из База знаний
Как корректно остановить виртуальные машины KVM Для начала в /etc/rc.d/init.d создадим скрипт shutdownkvm:
#!/bin/bash
#
# chkconfig: 03456 99 01
# description: Shut down KVM virtual machines
# processname: shutdownkvm
#
# Original Author :
# Joern http://www.linux-kvm.com/content/stop-script-running-vms-using-virsh
#
# Modified by : Andrey Mundirov http://pclovers.ru
# Date: 18 March 2011
# Parameters you can modify :: START
TIMEOUT=300
LISTFILE=/root/runvm.lst
LOGFILE=/var/log/kvmshutdown.log
# Parameters you can modify :: STOP
PS=/bin/ps
SSH=/usr/bin/ssh
GREP=/bin/grep
CUT=/usr/bin/cut
VIRSH=/usr/bin/virsh
TR=/usr/bin/tr
CAT=/bin/cat
DATE=/bin/date
# Function to shutdown the virtual machine
kvmshutdown () {
COUNT=0
PID=$($PS ax|$GREP $1|$GREP kvm|$CUT -c 1-6)
echo kvmshutdown \: Shutting down $1 with pid $PID
$VIRSH shutdown $1
#$($SSH root@$1 halt)
while [ "$COUNT" -lt "$TIMEOUT" ] ; do
echo -n "."
$PS --pid $PID > /dev/null 2>&1
if [ "$?" -eq "1" ] ; then
return 0
else
sleep 5
COUNT=$(($COUNT+5))
fi
done
echo kvmshutdown \: Timeout happened. Destroying VM $1
$VIRSH destroy $1
return 1
}
start()
{
touch /var/lock/subsys/shutdownvm
}
stop()
{
echo `$DATE +%Y-%m-%d\ %H:%M:%S` Starting script $0 >> $LOGFILE
rm -f /var/lock/subsys/shutdownvm
LANG=en $VIRSH list 2>/dev/null | $GREP running | $TR -s \ |$CUT -f3 -d\ > $LISTFILE
VMN=`$CAT $LISTFILE`
for vm in $VMN ; do
echo "$vm" is running
kvmshutdown "$vm"
if [ "$?" -eq "0" ] ; then
echo VM "$vm" normally shutdown
echo `$DATE +%Y-%m-%d\ %H:%M:%S` VM $vm normally shutdown >> $LOGFILE
else
echo VM "$vm" destroyed !
echo `$DATE +%Y-%m-%d\ %H:%M:%S` VM $vm destroyed >> $LOGFILE
fi
done
}
# The program begins here
case "$1" in
*start)
start
;;
stop)
stop
;;
*)
echo "Use: $0 (start|stop)"
;;
esac
затем выполняем последовательно:
chmod +x shutdownkvm chkconfig shutdownkvm on service shutdownkvm start