tomcat意外退出 A valid shutdown command was received via the shutdown port. Stopping the Server instance
昨天在公司使用jenkins发布项目,没有成功,今天上午来了,试了一上午,没有成功,下午让别人先别忙了,我专门部署调试这个jenkins项目公司jenkins在70机器上,部署项目在50机器,部署过程:70机器 从gitlab上下载最新代码70机器 使用maven打包项目,在target目录里产生*.war包70机器 通过ssh将war包传输到50机器,并执行50机器的一个脚本...
昨天在公司使用jenkins发布项目,没有成功,今天上午来了,试了一上午,不行。下午专门部署调试这个jenkins项目,公司jenkins在A机器上,项目部署在B机器,部署过程如下:
- A机器 从gitlab下载最新代码
- A机器 使用maven打包项目,在target目录产生.war包*
- A机器 通过ssh将war包传输到B机器,并执行B的restart.sh脚本
- B机器脚本功能:将war包放到tomcat的webapps目录中,重启tomcat
#问题描述
这是我的B机器restart.sh脚本
#!/bin/bash
tomcat_home=/usr/local/system/apache-tomcat-8.0.52
jenkins_package=/usr/local/jenkins
SHUTDOWN=$tomcat_home/bin/shutdown.sh
STARTTOMCAT=$tomcat_home/bin/startup.sh
echo "关闭$tomcat_home"
$SHUTDOWN
ps -ef |grep tomcat |grep $tomcat_home |grep -v 'grep'|awk '{print $2}' | xargs kill -9
#删除webapp文件夹
rm $tomcat_home/webapps/* -rf
#删除日志文件,如果你不先删除可以不要下面一行
rm $tomcat_home/logs/* -rf
#删除tomcat的临时目录
rm $tomcat_home/work/* -rf
#删除cataline文件
rm -rf $tomcat_home/logs/catalina*
#拷贝打好的war包到tomcat
cp -f $jenkins_package/system.war $tomcat_home/webapps/system.war
echo "启动$tomcat_home"
$STARTTOMCAT
#sleep 5 #!加上这个,小伙!
#看启动日志
#tail -f $tomcat_home/logs/catalina.out
我在jenkins启动的时候,观察启动过程,发现最后一步没有启动tomcat。查看catalina.out文件,最后输出一句:
org.apache.catalina.core.StandardServer.await A valid shutdown command was received via the shutdown port. Stopping the Server instance.
不难看出shutdown、stopping字眼。
tomcat自动停止了!!!
经过一番网上冲浪,原因在远程执行脚本的问题上,A机器执行B机器的重启tomcat脚本的时候,脚本执行完,但是启动tomcat这个任务还未来的及进行,就在这个时候ssh远程连接关闭,脚本退出的时候,发给他的子进程(启动tomcat进程)信号,tomcat因为还没开始启动,就停止了!!!
如果在启动tomcat命令执行后,延迟5秒退出,只要tomcat开始启动就不会因为脚本退出而关闭了!
于是**在$STARTTOMCAT下面加入一行 sleep 5 **就行了!
#参考
http://hongjiang.info/why-kill-2-cannot-stop-tomcat/
结语
推荐下我的开源作品 PiperChat
PiperChat 是一款简洁高效的即时通讯服务,提供多种技术供开发者选择,帮助开发者快速构建高并发的即时通讯服务。
帮助企业快速接入 IM系统 / 聊天室系统 / 客服系统 等其他实时消息类系统,如果对你有用请求给我一个Star呀!
更多推荐
所有评论(0)