upstart pré-stop morto durante o desligamento

4

Estou executando o servidor Ubuntu, hospedando uma máquina virtual usando um trabalho inicial. Eu tenho o lançamento na inicialização e desligar o host na saída, mas parece que não consigo suspendê-lo quando o host é desligado. Se eu usar initctl stop vmservice , então a suspensão acontece corretamente - mas se eu shutdown -h now ou reboot , parece que está sendo morto (tentei colocar um sono no script de pré-parada, e isso se comporta da mesma maneira ). Qualquer ajuda seria apreciada.

Sou bastante novo em relação ao upstart, então gostaria de receber qualquer outro feedback (inclusive, estou fazendo a coisa "certa" chamando shutdown em um pós-stop?).

meu trabalho (o 'start on' foi roubado do kdm.conf; .startvm e .stopvm apenas iniciam e suspendem a VM):

start on (filesystem
          and started dbus
          and (graphics-device-added fb0 PRIMARY_DEVICE_FOR_DISPLAY=1
               or drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
               or stopped udevtrigger))
stop on runlevel [016]

pre-stop script
    exec su -c "/home/unprivileged_user/.stopvm" - unprivileged_user
end script

env XORGCONFIG=/etc/X11/xorg.conf
exec su -c "xinit /home/unprivileged_user/.startvm -- /etc/X11/xinit/xserverrc :0" - unprivileged_user

post-stop script
    shutdown -h now
end script
    
por Nate 24.04.2011 / 22:28

1 resposta

4

Upstart irá enviar SIGKILL (como em, kill -9) após 5 segundos de espera por uma pré-parada ou o sinal enviado para o processo principal.

Use

kill timeout 10

Para se dar 10 segundos para morrer. Você na verdade não pode se dar mais do que isso porque o desligamento só esperará 10 segundos para que qualquer processo morra antes de desligar completamente de qualquer maneira. Para garantir que sua VM seja interrompida antes , o desligamento total do sistema é iniciado:

Use isto:

stop on starting rc RUNLEVEL=[016]

Isso fará com que sua VM seja totalmente interrompida antes que o sistema inicie a rotina normal de desligamento (embora o tempo limite de eliminação ainda esteja em vigor, então aumente também!)

Além disso, o início complexo do SUPER não é realmente necessário, embora pareça que você o tenha copiado do gdm ou do lightdm.

Se você quiser que sua VM esteja em execução sempre que o gerenciador de exibição estiver em execução, isso é muito mais simples:

start on started lightdm or started gdm
    
por SpamapS 02.09.2011 / 19:00

Tags