Por que esse arquivo bash interrompe meu Tomcat se a sessão for encerrada?

Por que esse arquivo bash interrompe meu Tomcat se a sessão for encerrada?

O script bash a seguir inicia um Apache Tomcat e direciona o arquivo de log para a tela:

#!/bin/bash
~/tomcats/TC1_8083/bin/startup.sh
tail -f ~/tomcats/TC1_8083/logs/catalina.out

Se eu CTRL-C o final, o script bash termina e o Tomcat continua a ser executado corretamente, mesmo se eu fizer logoff. No entanto, se minha sessão terminar (por exemplo, por meio de uma desconexão de rede), ENQUANTO o tail ainda estiver em execução, o Tomcat também parará. Se eu tivesse CTRL-C na cauda, ​​​​o Tomcat não pararia até que eu decidisse matá-lo.

Não estou interessado em manter o controle ativo em uma desconexão de rede, só quero que o Tomcat continue funcionando de qualquer maneira.

Não consigo entender esse comportamento. Alguém pode explicar isso? Além disso, como eu poderia alterar o script para que o Tomcat continuasse funcionando mesmo se a rede fosse desconectada?

Responder1

Quando você chama um script de outro script, ele é executado em segundo plano (caso contrário, você teria dois scripts sendo executados simultaneamente em primeiro plano, ambos tentando gerar saída na tela)

Quando você pressiona Ctrl-C, você envia um sinal de interrupção para o seu script (não apenas para o final), mas o script do Tomcat continua sendo executado em segundo plano, pois é um script separado.

Quando sua sessão termina, todos os scripts em execução são encerrados, incluindo aqueles em execução em segundo plano.

Se você quiser que os scripts continuem em execução quando você se desconectar da rede (intencionalmente ou não), recomendo tmux ou screen.

informação relacionada