如果會話關閉,為什麼這個 bash 檔案會停止我的 tomcat?

如果會話關閉,為什麼這個 bash 檔案會停止我的 tomcat?

以下 bash 腳本啟動 Apache Tomcat 並將日誌檔案拖曳到螢幕上:

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

如果我按 CTRL-C 尾部,bash 腳本就會結束,即使我註銷,Tomcat 也會繼續正確運行。但是,如果我的會話終止(例如透過網路斷開連接),而 tail 仍在運行,那麼 Tomcat 也會停止。如果我按 CTRL-C 控制尾巴,那麼雄貓將不會停止,直到我選擇殺死它。

我對在網路斷開連接時保持尾部活動不感興趣,我只想讓 Tomcat 繼續運行。

我無法理解這種行為。有人可以解釋一下嗎?另外,如何更改腳本,以便即使網路斷開,Tomcat 也能繼續運作?

答案1

當您從另一個腳本呼叫一個腳本時,它會在背景運行(否則您將有兩個腳本同時在前台運行,兩者都試圖輸出到螢幕)

當您按下 Ctrl-C 時,您將向腳本發送中斷訊號(不僅僅是 tail),但 tomcat 腳本繼續在背景執行,因為它是一個單獨的腳本。

當您的會話終止時,所有正在執行的腳本都會終止,包括在背景執行的腳本。

如果您希望腳本在斷開網路連線(有意或無意)時繼續運行,我推薦 tmux 或 screen。

相關內容