以下 bash 脚本启动 Apache Tomcat 并将日志文件显示到屏幕上:
#!/bin/bash
~/tomcats/TC1_8083/bin/startup.sh
tail -f ~/tomcats/TC1_8083/logs/catalina.out
如果我按 CTRL-C 键关闭 tail,bash 脚本就会结束,即使我注销,Tomcat 也会继续正常运行。但是,如果我的会话终止(例如由于网络断开),而 tail 仍在运行,那么 Tomcat 也会停止。如果我按 CTRL-C 键关闭 tail,那么 Tomcat 不会停止,直到我选择将其关闭。
我对在网络断开时保持尾部活动不感兴趣,我只是希望 Tomcat 能够继续运行。
我无法理解这种行为。有人能解释一下吗?另外,我该如何更改脚本,以便即使网络断开连接,Tomcat 也能继续运行?
答案1
当您从另一个脚本调用一个脚本时,它会在后台运行(否则,您将有两个脚本同时在前台运行,并且都试图输出到屏幕)
当您按下 Ctrl-C 时,您会向您的脚本(不仅仅是 tail)发送一个中断信号,但是 tomcat 脚本会继续在后台运行,因为它是一个单独的脚本。
当您的会话结束时,所有正在运行的脚本都将终止,包括在后台运行的脚本。
如果您希望在断开网络(有意或无意)时脚本继续运行,我建议使用 tmux 或 screen。