Usando upstart com parada desconhecida

9

Estou começando a criar um script básico para imprimir no arquivo de log chamado: vm-service.conf que eu coloquei em /etc/init :

description "Virtual Images"
author      "Me"

start on runlevel [2345]
stop on runlevel [016]
respawn   


script
echo "DEBUG: 'set'" >> /tmp/vm-service.log

end script


pre-stop script
    echo "DEBUG: 'set'" >> /tmp/vm-service.log
end script

se eu executar sudo start vm-service , a saída será:

vm-service start/running, process 29034

Mas, quando eu executo sudo stop vm-service , ele gera:

stop: Unknown instance

Eu tentei executar sudo initctl reload-configuration , mas ainda recebo o erro ao terminar.

Eu olhei para o livro de receitas , mas provavelmente estou sentindo falta de algo óbvio.

    
por adviner 17.08.2014 / 18:56

1 resposta

7

O Upstart considerará a tarefa interrompida se o processo principal (o que é executado se o script ou as sub-rotinas exec forem especificados) for encerrado. O Upstart executará o processo de pós-inicialização.

Então, o que está acontecendo é que o primeiro script está em execução e saindo, o Upstart está considerando a tarefa interrompida e, em seguida, o segundo script está em execução e saindo. Se você executar o comando de parada em um trabalho já interrompido, ele imprimirá a mensagem que você viu.

Para lidar com isso, use uma sub-rotina de pré-início:

pre-start exec foo --bar

post-start exec baz --foo

se você fizer isso, o Upstart verá o trabalho como iniciado assim que a sub-rotina de pré-início terminar, e não como interrompido.

    
por 26.08.2014 / 20:21