次の bash スクリプトは、Apache Tomcat を起動し、ログ ファイルを画面に表示します。
#!/bin/bash
~/tomcats/TC1_8083/bin/startup.sh
tail -f ~/tomcats/TC1_8083/logs/catalina.out
tail を CTRL-C で終了すると、bash スクリプトが終了し、ログオフしても Tomcat は正常に動作し続けます。ただし、tail がまだ動作している間にセッションが終了すると (たとえば、ネットワークの切断により)、Tomcat も停止します。tail を CTRL-C で終了した場合、Tomcat は強制終了を選択するまで停止しません。
ネットワークが切断されたときに tail を存続させることには興味がなく、Tomcat がとにかく実行し続けることだけを望んでいます。
この動作が理解できません。誰か説明してもらえますか? また、ネットワークが切断されても Tomcat が引き続き実行されるようにスクリプトを変更するにはどうすればよいでしょうか?
答え1
別のスクリプトからスクリプトを呼び出すと、そのスクリプトはバックグラウンドで実行されます (そうでない場合、2 つのスクリプトが同時にフォアグラウンドで実行され、両方とも画面に出力しようとすることになります)
Ctrl + C を押すと、スクリプト (tail だけでなく) に割り込み信号が送信されますが、Tomcat スクリプトは別のスクリプトであるため、バックグラウンドで実行され続けます。
セッションが終了すると、バックグラウンドで実行されているスクリプトも含め、実行中のすべてのスクリプトが終了します。
ネットワークから切断しても(意図的か否かにかかわらず)スクリプトの実行を継続したい場合は、tmux または screen をお勧めします。