以下 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。