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