Warum stoppt diese Bash-Datei meinen Tomcat, wenn die Sitzung geschlossen wird?

Warum stoppt diese Bash-Datei meinen Tomcat, wenn die Sitzung geschlossen wird?

Das folgende Bash-Skript startet einen Apache Tomcat und zeigt die Protokolldatei auf dem Bildschirm an:

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

Wenn ich STRG+C auf das Tail drücke, wird das Bash-Skript beendet und der Tomcat läuft weiterhin ordnungsgemäß, auch wenn ich mich abmelde. Wenn meine Sitzung jedoch beendet wird (beispielsweise durch eine Netzwerktrennung), WÄHREND das Tail noch läuft, stoppt auch der Tomcat. Wenn ich STRG+C auf das Tail gedrückt habe, stoppt der Tomcat nicht, bis ich ihn beende.

Ich bin nicht daran interessiert, das Tail bei einer Netzwerktrennung am Leben zu erhalten, ich möchte nur, dass der Tomcat unabhängig davon weiterläuft.

Ich verstehe dieses Verhalten nicht. Kann das bitte jemand erklären? Und wie kann ich das Skript ändern, damit Tomcat auch dann weiterläuft, wenn die Netzwerkverbindung unterbrochen wird?

Antwort1

Wenn Sie ein Skript aus einem anderen Skript aufrufen, wird es im Hintergrund ausgeführt (sonst würden zwei Skripte gleichzeitig im Vordergrund ausgeführt, die beide versuchen, eine Ausgabe auf dem Bildschirm zu erstellen).

Wenn Sie Strg-C drücken, senden Sie ein Unterbrechungssignal an Ihr Skript (nicht nur an Tail), aber das Tomcat-Skript wird im Hintergrund weiterhin ausgeführt, da es ein separates Skript ist.

Wenn Ihre Sitzung beendet wird, werden alle laufenden Skripts beendet, einschließlich derjenigen, die im Hintergrund ausgeführt werden.

Wenn Sie möchten, dass Skripte weiter ausgeführt werden, wenn Sie die Verbindung zum Netzwerk trennen (absichtlich oder nicht), empfehle ich tmux oder screen.

verwandte Informationen