sleep em script upstart (sincronismo inicial)

5

Eu escrevi este código para iniciar automaticamente o KVM Virtual Machine na inicialização do sistema host e parar o Virtual Machine no desligamento ou reinicialização do sistema host.

start on startup
start on started networking and started qemu-kvm and started libvirt-bin
stop on runlevel [016]

kill timeout 70
expect fork

pre-start exec /KVM/luc.sh prepara

exec /KVM/luc.sh avvia

pre-stop script 
   /KVM/luc.sh ferma
   /bin/sleep 20
end script

luc.sh é um script com estas funções:

  • prepara () - prepara o ambiente
  • avvia () - inicia o KVM
  • ferma () - KVM de encerramento

Funciona com exceção do comando sleep . Eu preciso atrasar a operação de desligamento / reinicialização do sistema host para aguardar a conclusão do desligamento de convidado. Em outras palavras, quero inserir uma espera de ~ 20 segundos após o comando /KVM/luc.sh ferma . Parece que a chamada sleep no script upstart é assíncrona. É possível fazer uma chamada síncrona no script inicial?

    
por francesco 30.10.2010 / 23:36

1 resposta

2

Sim, de alguma forma, o sono não funciona para mim (estou usando o Ubuntu 10.04). Não tenho certeza se a solução a seguir é a melhor, mas parece estar funcionando.

  1. Crie uma tarefa upstart adicional, digamos, post-sleep.conf (registro adicionado para maior clareza):

    description "Sleep when the job finishes"
    
    task
    
    script
        echo "Sleeping..." | logger -t "post-sleep-job"
        /bin/sleep 60s
        echo "Done sleeping" | logger -t "post-sleep-job"
    end script
    
  2. Adicione o seguinte ao trabalho que precisa dormir após o desligamento:

    post-stop script
        start post-sleep
    end script
    

Use instâncias no primeiro script se várias tarefas precisarem aguardar antes do desligamento completo. No entanto, acredito que uma solução ainda melhor e mais robusta seria confiar nos eventos .

    
por 28.03.2011 / 09:05

Tags