生产环境tomcat 在liunx系统中shutdown后进程仍然存在解决办法

用systemctl status tomcat查看状态显示:PID file found but either no matching process was found or the current user

生产环境tomcat 在liunx系统中shutdown后进程仍然存在解决办法

最近我们在使用Jenkins自动化部署项目时,在生产liunx环境下,使用脚本shutdown.sh停止tomcat服务,然后再start之后发现应用无法访问了,后台查看tomcat进程是发现有个2个tomcat进程,说明之前的shutdown并没有完全停掉tomcat进程。那怎么样tomcat使用shutdown之后立马关掉其进程呢? 经查资料发现在shutdown.sh脚本之后有条命令是这样的:


这个就是停止tomcat 服务的命令,我们只需要加一个  -force  就可以在shutdown时强制关闭tomcat进程


但光这样还是不行,再shutdown时报错:


查找失败原因:

从中可以看到,首先是执行java命令失败,没有停止tomcat,然后执行-force模块的命令,但是却没有找到$CATALINA_PID设定的进程号,我们先不去关注java执行stop命令为什么报错,而是看看为什么加了-force参数也不起作用了

为什么没有$CATALINA_PID?接下来就带大家一探究竟

首先,我们将涉及到$CATALINA_PID变量的代码全部提取出来:

第一处:

#以下这句判断设置的$CATALINA_PID变量如果不存在,则显示"Using CATALINA_PID:

 
#貌似只是判断$CATALINA_PID是否是空字符,其他什么都没有做

第二处:(涉及到start参数的模块内的$CATALINA_PID变量,只是提出来分析,其实不对stop模块有影响)


第三处:


#如果发现$CATALINA_PID则发送一个模拟结束进程的型号,如果返回值为0,则正常,其他则异常,做退出操作

#从上面的sh -x输出的信息对应的是:'[' '!' -z '' ']' 可以看出$CATALINA_PID变量没有设定,所以这个判断直接就结束了,什么都没做

第四处:

 


 
第五处:


总结下,$CATALINA_PID在整个代码中的作用:

1.在tomcat启动时会写入$CATALINA_PID,但是假设我们的环境是多tomcat项目或$CATALINA_PID为空

2.stop代码中,检查$CATALINA_PID是否为空字符,是的话什么都不做

3.sstop代码中,检查$CATALINA_PID是否为空字符,是的话什么都不做

4.force代码中,检查$CATALINA_PID是否为空字符,是的话就报错

也就是说只要没有保存中这个项目的PID,那么正常stop停止不了,-force也是没有用的。

那么该如何解决呢?直接给$CATALINA_PID付PID的值,那么看结果:


涉及到的代码:


 #$CATALINA_PID不是个文件,所以不好意思,我退出了....
原来$CATALINA_PID还必须是个文件,那么我们可不可以建这么一个文件呢?

在catalina.sh脚本的代码前,加入以下语句:

总结:

在我看到的很到部署tomcat的文章中,还没发现有关于设置$CATALINA_PID文件路径的提示(也许是我看到的少),但是此处我要建议小伙伴们,在写tomcat启动、停止、重启的脚本的时候,一定要注意这个变量。
--------------------- 
作者:hxyerui 
来源:CSDN 
原文:https://blog.csdn.net/hxyerui/article/details/52181884 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值