secureCRT关闭连接自动关闭tomcat服务
2018-04-10 18:56
381 查看
下午遇到一个神奇的问题:
secureCRT登陆某个服务器,用shell脚本启动./catalina.sh start,打开日志tail -f catalina.out,此时 手动关闭连接窗口,导致tomcat的服务竟然关闭了,看日志,截图如下:
仔细看图,发现关键字:
shell脚本启动tomcat,Tomcat启动后,当前shell进程并没有退出,而是挂住在tail进程,往终端输出日志内容。这种情况下,如果用户直接关闭ssh终端的窗口(用鼠标或快捷键),则java进程也会退出。而如果先
脚本简化如下:
关闭的原因:
关闭ssh终端窗口时,sshd向下游进程发送
在非交互模式下,shell对java进程设置了
sshd把
解决方案,加入一行 set -m 开启作业模式:
此时java后台进程继承父进程catalina.sh的pgid,而catalina.sh不再使用test.sh的进程组,而是自己的pid作为pgid,catalina.sh进程在执行完退出后,java进程挂到了init下,java与test.sh进程就完全脱离关系了,bash也不会再向它发送信号。
===================
参考:http://ifeve.com/why-kill-2-cannot-stop-tomcat/
secureCRT登陆某个服务器,用shell脚本启动./catalina.sh start,打开日志tail -f catalina.out,此时 手动关闭连接窗口,导致tomcat的服务竟然关闭了,看日志,截图如下:
仔细看图,发现关键字:
AbstractProtocol pause、org.apache.catalina.core.StandardService stopInternal、[code]DubboShutdownHook、EventThread shut down很明显不是正常关闭打印的节奏。应该是触发内核操作甚至还挂上了钩子。上网一搜果然有问题:
shell脚本启动tomcat,Tomcat启动后,当前shell进程并没有退出,而是挂住在tail进程,往终端输出日志内容。这种情况下,如果用户直接关闭ssh终端的窗口(用鼠标或快捷键),则java进程也会退出。而如果先
ctrl-c终止test.sh进程,然后再关闭ssh终端的话,则java进程不会退出。
脚本简化如下:
#!/bin/bash cd /data/server/tomcat/bin/ ./catalina.sh start tail -f /data/server/tomcat/logs/catalina.out
关闭的原因:
关闭ssh终端窗口时,sshd向下游进程发送
SIGHUP
SIGHUP这个信号导致最终关闭进程,具体流程如下:
在非交互模式下,shell对java进程设置了
SIGINT,
SIGQUIT信号设置了忽略,但并没有对
SIGHUP信号设为忽略。再看一下当时的进程层级:[/code]
|-sshd(1622)-+-sshd(11681)---sshd(11699)---bash(11700)---test.sh(13285)---tail(13299)
sshd把
SIGHUP传递给bash进程后,bash会把
SIGHUP传递给它的子进程,并且对于其子进程test.sh,bash还会对test.sh的进程组里的成员都传播一遍
SIGHUP。因为java后台进程从父进程catalina.sh(又是从其父进程test.sh)继承的pgid,所以java进程仍属于test.sh进程组里的成员,收到
SIGHUP后退出。[/code]
解决方案,加入一行 set -m 开启作业模式:
#!/bin/bash set -m cd /home/admin/tt/tomcat/bin/ ./catalina.sh start tail -f /home/admin/tt/tomcat/logs/catalina.out
此时java后台进程继承父进程catalina.sh的pgid,而catalina.sh不再使用test.sh的进程组,而是自己的pid作为pgid,catalina.sh进程在执行完退出后,java进程挂到了init下,java与test.sh进程就完全脱离关系了,bash也不会再向它发送信号。
===================
参考:http://ifeve.com/why-kill-2-cannot-stop-tomcat/
相关文章推荐
- secureCRT关闭连接自动关闭tomcat服务
- SecureCRT 连接 同一个网段里有一台机器 linux sshd seesion自动关闭
- Linux 监控tomcat,自动重启tomcat服务
- 在Tomcat下无法清除MySQL连接线程导致服务挂掉的解决办法
- JDBC 关闭数据库连接与自动提交
- Cygwin ssh服务配置 (SecureCRT连接Cygwin配置)
- SSH中hibernate过了8个小时后自动关闭与数据库的连接
- 应对 win2003server 服务自动关闭的方案
- mysql 服务器服务重启自动关闭,且拷贝mysql系统文件I/O设备错误(无法拷走)
- linux下tomcat服务的启动、关闭与错误跟踪
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。
- Windows下如何用cmd自动打开/关闭Oracle的服务
- linux设置服务为自动启动和关闭并禁用的命令
- 如何让你的Tomcat在开机时自动以服务的形式启动
- C#数据适配器将自动关闭连接数据库
- 【整理】解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】
- javaEE 无法安装axis2 1.6插件;Tomcat无法启动,提示端口占用;Tomcat服务发布;axis2发布配置;syso自动补全
- 关闭CentOS系统自动更新服务
- 把Tomcat做成系统服务自动启动
- windows部署tomcat服务自动启动,及卸载服务