Suas outras perguntas no link e Existe alguma maneira de saber se um script de shell foi morto com o sinal 9 indica que o que está faltando na sua pergunta é que você está tentando executar o Tomcat sob o upstart.
Nesse caso:
-
start-stop-daemon
não é apropriado.
- Nem é
su
.
- Nem são os giros do Daemon Poor Man's Supervisor para fazer o gerenciamento de arquivos PID no shell script.
Todos eles estão tentando duplicar coisas que o upstart faz diretamente . O uso de su
é particularmente ruim, porque não é uma ferramenta para eliminar privilégios. É uma ferramenta para adicionar privilégios , em uma sessão de login. Hoje em dia tem envolvimento sob os capítulos com vários subsistemas de gerenciamento de sessões de login que o torna particularmente inapropriado para a tarefa (muito mais simples) de eliminar privilégios de superusuário em um daemon. start-stop-daemon
é apenas supererrogatório. E o upstart conhece os IDs do processo de seus filhos.
No arquivo de tarefa inicial, use as estrofes setuid
e (se apropriado) setgid
para descartar privilégios para um usuário não privilegiado:
setuid tomcat
E se você invocar catalina.sh
via sh -c
, o que não é realmente necessário, não passe pelo território de House of Horror. (É apenas um pouco menos horrendo quando esses tipos de coisas são feitos com o upstart.) Faça as coisas do jeito do daemontools e tenha a cadeia do shell no script, invocando-a pelo comando exec
do shell para que o iniciante enxergue o daemon como seu filho direto processo. (E certifique-se de que o upstart também saiba disso com a sub-rotina expect
correta).
No entanto, um shell explícito não é necessário, porque o upstart pode invocar catalina.sh
diretamente, assim como o systemd e outras ferramentas de gerenciamento de serviços. Além disso, você não tem a preocupação de garantir que /bin/bash
seja o intérprete correto para esse script.
exec $CATALINA_HOME/bin/catalina.sh run
Leitura adicional