link foi corrigido recentemente, por isso deve haver uma libvirt atualizada em breve .
Eu tenho libvirt / KVM configurado no meu Ubuntu e antes de desligar a máquina, eu gostaria que ele tentasse desligar as VMs usando um ACPI poweroff (virsh shutdown), então eu quero que ele pare de desligar por pelo menos 60 segundos para dar a VM a chance de sincronizar tudo para o disco, é isso que eu tenho:
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
O problema que estou tendo é que, por alguma razão estranha, nunca chega a ecoar "pronto". mesmo que as VMs sejam todas desligadas corretamente, elas continuarão em loop e, portanto, atrasarão por 60 segundos OU parecerão ignorar completamente o modo de suspensão, escreverão o total para $SHUTDOWN_LOG
e serão encerradas imediatamente no meio da sincronização da VM para disco.
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]
A saída do log ... existe alguma maneira melhor de fazer o log-in do upstart?
link foi corrigido recentemente, por isso deve haver uma libvirt atualizada em breve .
Você não pode fazer o eco de um script iniciante, infelizmente, a melhor opção é a que você já está fazendo, criando seu próprio log.
Se você quiser também enviar para o syslog, você pode fazer isso no upstart usando o logger (como você faria no init.d), mas a depuração do Upstart até agora é bastante dura.
Você também pode adicionar set -x
no início do seu script de pré-parada para obter mais resultados através do canal de log de inicialização avançada padrão (syslog no Ubuntu)