Как правильно выключать гостевые ОС KVM?

Добрый день! Имеется сервак(centos 7) в офисе + ups must 3000VA с консольным СОМ портом. Все это дело подключил друг к другу и установил nut. На сервере имеется kvm, на котором крутятся машинки windows и linux. Собственно задача: при выключении света упс дает сигнал что она работает от батарей, потом когда разряд доходит до минимума посылает команду nut-monitor который в свою очередь выполняет скрипт выключения машинок и выключения хост машины. Собственно вся проблема в том что именно windows машины получая сигнал выключения зависают и не хотят выключатся. Что было сделанно:
установил груповые политики в windows, чтобы выключался сервер не входя в систему и не выводиk окошко о том как завершить работу сервера. Установил в реестре значение ShutdownWarningDialogTimeout=00000001
не помогло
установил настройки в файле /etc/sysconfig/libvirt-guests
ON_SHUTDOWN=shutdown PARALLEL_SHUTDOWN=1 SHUTDOWN_TIMEOUT=90
не помогло
конфиг /etc/ups/ups.conf
[Must] driver = blazer_ser port = /dev/ttyS0 desc = «server» offdelay = 300 ondelay = 0
конфиг /etc/ups/upsmon.conf
RUN_AS_USER nut MONITOR Must@localhost 1 monuser password master MINSUPPLIES 1 SHUTDOWNCMD «sudo /etc/ups/shutdown.sh --shutdown» POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 POWERDOWNFLAG /etc/ups/killpower RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 0
конфиг /etc/ups/upsd.users
[monuser] password = password actions = SET instcmds = ALL upsmon master
ну и сам скрипт выключения
#!/bin/bash shutdown_quests(){ LIST_VM=`virsh list | grep running | awk '{print $2}'` TIMEOUT=90 DATE=`date -R` LOGFILE="/etc/ups/kvm-quest-shutdown.log" if [[! -e $LOGFILE ]]; then touch $LOGFILE #echo "$LOGFILE created" 1>&2 elif [[! -d $LOGFILE ]]; then echo "$DATE: Start script" >> $LOGFILE fi for activevm in $LIST_VM do PIDNO=`ps ax | grep $activevm | grep kvm | cut -c 1-6 | head -n1` echo "$DATE: Shutdown: $activevm: $PIDNO" >> $LOGFILE virsh shutdown $activevm > /dev/null COUNT=0 while [ "$COUNT" -lt "$TIMEOUT" ] do ps --pid $PIDNO > /dev/null if [ "$?" -eq «1» ] then COUNT=110 else sleep 5 COUNT=$(($COUNT+5)) fi done if [ $COUNT -lt 110 ] then echo "$DATE: $activevm not successful force shutdown" >> $LOGFILE virsh destroy $activevm > /dev/null fi done } note(){ echo -e "--------------------------------------------------------\n" echo -e "\nYou need usage script with arguments: --reboot ot --shutdown:\n\n $0 --shutdown\n" exit 1 } reboot_node(){ reboot } shutdown_node(){ systemctl poweroff -i } if [ $# -ne 1 ]; then note fi for i in "$@"; do if [[ $i == "--reboot" ]]; then shutdown_quests reboot_node break fi if [[ $i == "--shutdown" ]]; then shutdown_quests shutdown_node break fi done
изменил sudo файл
Defaults !requiretty nut ALL=(ALL) NOPASSWD: /etc/ups/shutdown.sh
Подскажите что я делаю нее так?! Почему при обычном systemctl poweroff -i машинки не выключаются а уничтожаются kvm? Заранее всем спасибо

удалось найти службу, которая следит за гостевыми машинами, libvirt-guests.service, запустил ее. Теперь если ее остановить, то машинки выключаются как положено. А если послать сигнал выключения хост машине, то выключение не дожидается окончания выключения гостевых машин. Попробую сделать скрипт, который будет останавливать службу libvirt-guests.service, проверять не осталось ли запущеных машин и выключать хост машину

Нет комментариев