A solução para isso acabou na documentação do Upstart :
Crie uma seção de pós-inicialização que realize alguma verificação e retorne somente quando o serviço estiver "pronto".
Estou trabalhando em um pacote que precisa de duas tarefas do Upstart: uma que inicia um daemon e outra que inicia um daemon de suporte se o arquivo de configuração exigir. A lógica para determinar se o daemon de suporte deve ser lançado envolve o processamento do arquivo de configuração com sed
e amigos, o que causa problemas com a detecção de daemonização do Upstart (Upstart não tem como distinguir PIDs), portanto expect fork
e expect daemon
aren ' t útil. Infelizmente, isso significa que o Upstart detecta a primeira chamada de sed
como o primeiro PID e inicia imediatamente o trabalho principal, antes que o daemon de suporte seja totalmente inicializado. Isso freqüentemente leva ao término prematuro do trabalho principal, devido a um ambiente configurado incorretamente.
Existe alguma maneira de impedir que o Upstart inicie o trabalho principal muito cedo neste cenário?
expect stop
parece estar perto do que eu preciso, mas eu não vejo uma maneira de aumentar o sinal sem terminar um dos daemons, nenhum dos quais gera o sinal SIGSTOP por conta própria.
A solução para isso acabou na documentação do Upstart :
Crie uma seção de pós-inicialização que realize alguma verificação e retorne somente quando o serviço estiver "pronto".
Simples - use a sub-rotina pre-start
para executar toda a verificação sed
. Se o pre-start
determinar que o daemon de suporte não deve ser iniciado, basta chamar stop
(o que força o Upstart a não continuar a iniciar o trabalho). Há um exemplo disso no Cookbook Upstart aqui:
Observe que o Upstart executa somente rastreamento de PID para as estrofes exec
e script
(em outras palavras, a parte "principal" do trabalho) - PIDs para pre-start
, post-stop
et al não são rastreados. Veja o link