Eu encontrei a resposta usando alguns termos de pesquisa ligeiramente diferentes: expect stop
Unfortunately, this means Upstart detects the first invocation of sed as the first PID
Além disso, a resposta para uma solução alternativa está próxima, pre-start
, que é exatamente projetada para essa finalidade. Não pensei sobre isso, mesmo que eu tenha lido antes nos documentos ...
Eu também encontrei uma proposta interessante: Possibilidade de dizer explicitamente que PID rastrear
Devido a alguns problemas com um dos meus serviços, tive outra visão de como ele se comporta com o Upstart e encontrei o seguinte: Minha sub-rotina "script" ainda está chamando binários como "dirname", "readlink" e "ls" para não precisa codificar um diretório de trabalho, construir algum caminho de classe Java e tal. A parte importante é que esses não são internos do shell e, portanto, devem ser rastreados pelo Upstart, porque "readlink" é o primeiro binário executado em "start". Mas esse não é o caso, esses PIDs parecem ser ignorados e o Upstart, em vez disso, rastreia o PID do comando "exec java ..." que eu realmente quero ver rastreado. Eu verifiquei isso chamando "serviço ... status" e comparando a saída com "ps axf | grep ..." e ambos os PIDs correspondem. Eu posso reiniciar corretamente o serviço e o PID encontrado anteriormente é removido e iniciar o serviço e o status ps e service ... reportam o mesmo PID novamente.
Duas explicações possíveis: Como "dirname" e Co. são usados como substituição de comando, o Upstart reconhece os subshells criados pelo próprio shell criado para a sub-rotina "script" e ignora esses PIDs por finalidade. Outro "exec" pode retornar um PID que substitui qualquer PID reconhecido anterior. Eu duvido do último e acho que sub-conjuntos são simplesmente ignorados, o que é uma característica muito legal então.