项目场景:
昨天遇到的一个现象,发现 tomcat 莫名其妙的 shutdown,发现与 shell 脚本 中 使用 tail 的用法有关
问题描述:
(日志时间不准忽略,系统时间不准)
昨晚23点左右启动的tomcat ,第二天发现应用挂了,catalina.out日志莫名其妙的shutdown了。
26-Dec-2020 12:28:10.922 INFO [main] org.apache.catalina.core.StandardServer.await A valid shutdown command was received via the shutdown port. Stopping the Server instance.
26-Dec-2020 12:28:10.923 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
26-Dec-2020 12:28:10.930 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
原因分析:
tomcat的脚本startup.sh 和 tailf同时被写在了 shell脚本中,由于操作上没注意Xshell窗口一直开着,也没有执行CTRL + C,tailf持续打印日志的进程一直在,相当于ssh连接一直在,然后就去人跑去做验证了,下班后也没管。
下面这个脚本 2种处理方式会造成 tomcat shutdown。
相同的原理:tailf打开的日志继续打印,ssh断开,则同步关闭tomcat的进程,导致shutdown
1、主动关闭Xshell窗口
2、不执行CTRL + C,等Xshell 窗口超时 或 Xshell机器与 tomcat服务器断开网络
cd $JAVAWORKDIR
startup.sh
sleep 5
tailf $TOMCAT_HOME/logs/catalina.out
解决方案:
1、改变人的习惯,注意CTRL + C 进行退出操作
2、改变脚本 屏蔽因为操作人员习惯上的疏忽留下的漏洞隐患
修改前:tailf 或 tail -f 持续打印的状况
修改后:tail -n 100只打印最后 100行;或 直接去掉 tail 打印
cd $JAVAWORKDIR
startup.sh
sleep 5
tail -n 100 $TOMCAT_HOME/logs/catalina.out