Назад | Перейти на главную страницу

сценарий предварительной остановки выскочки

У меня есть libvirt / KVM, настроенный на моем Ubuntu, и перед выключением машины я хотел бы, чтобы он попытался выключить виртуальную машину с помощью ACPI poweroff (выключение virsh), затем я хочу, чтобы он останавливал выключение не менее чем на 60 секунд, чтобы дать У виртуальной машины есть шанс синхронизировать все на диск, вот что у меня есть:

pre-stop script
    SHUTDOWN_LOG=/var/log/libvirt/qemu/shutdown_vms.log
    for RUNNING_VM in `virsh list | grep -E running | awk -F" " '{ print $2 }'`
    do
        echo "Shutting down ${RUNNING_VM} on `date`" >> $SHUTDOWN_LOG
        virsh shutdown ${RUNNING_VM}
    done
    echo -n "Waiting for VM's to shut down: " >> $SHUTDOWN_LOG
    for I in `seq 1 10`
    do
        RUNNING=`virsh list | grep running | wc -l`
        if [[ "$RUNNING" == "0" ]] 
        then 
            echo "done." >> $SHUTDOWN_LOG
            exit 0
        else 
            /bin/sleep 6 && echo -n " ${RUNNING} " >> $SHUTDOWN_LOG
        fi
    done
    echo " Cleaning up..." >> $SHUTDOWN_LOG
end script  

Проблема, с которой я столкнулся, заключается в том, что по какой-то странной причине он никогда не повторяется "готово". даже если все виртуальные машины выключены правильно, она будет продолжать зацикливаться и, таким образом, останавливаться на 60 секунд, ИЛИ она, кажется, полностью игнорирует сон, записывает общую сумму в $SHUTDOWN_LOG и в любом случае немедленно завершает работу во время синхронизации моей виртуальной машины с диском.

Shutting down FreeBSD-services on Mon Aug 22 02:07:42 MDT 2011
Shutting down FreeBSD-pgsql on Mon Aug 22 02:07:42 MDT 2011
Waiting for VM's to shut down:  1 [EOF]

Выход журнала ... есть ли лучший способ войти в систему из выскочки?

https://bugs.launchpad.net/ubuntu/lucid/+source/libvirt/+bug/350936 была недавно исправлена, поэтому скоро должна быть обновлена ​​libvirt.

К сожалению, вы не можете повторить эхо из сценария-выскочки, лучшим вариантом является тот, который вы уже делаете, а именно создание собственного журнала.

Если вы хотите также выводить данные в системный журнал, вы можете сделать это в выскочке с помощью logger (как в init.d), но отладка Upstart пока что довольно жесткая.

Вы также можете добавить set -x в начале вашего сценария предварительной остановки, чтобы получить больше результатов через канал журнала выскочки по умолчанию (syslog в Ubuntu)