Usando upstart com parar instância desconhecida

8

Estou apenas começando, então eu escrevi um script muito básico apenas para imprimir no arquivo de log chamado: vm-service.confque eu coloquei /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, ele gera:

vm-service start/running, process 29034

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

stop: Unknown instance

Eu tentei correr sudo initctl reload-configuration, mas ainda recebo o erro na parada.

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

adviner
fonte

Respostas:

7

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

Então, o que está acontecendo é que o primeiro script está sendo executado e encerrado, o Upstart está considerando o trabalho interrompido e o segundo script está sendo executado e encerrado. Se você executar o comando stop em um trabalho já parado, ele imprimirá a mensagem que você viu.

Para lidar com isso, use uma estrofe de pré-inicialização:

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é-inicialização terminar, e não como interrompido.

CameronNemo
fonte