最近用Jenkins部署项目,部署结束后启动Tomcat,一直不成功,网上查找资料说是jenkins在脚本执行结束后,就认为任务结束了,但是脚本启动的相关子程序仍然在运行。由于jenkins认为任务已经结束了,就结束了该构建相关的衍生进程。按照网上添加BUILD_ID也无济于事。
前后排查了近半天,时好时不好。后来想起debug下重启tomcat的shell脚本。于是发现出了问题。
用jenkins重启tomcat之前有时是先用shell打开tomcat日志准备看是否重启成功有时未打开日志查看。当打开日志查看时这样就会多出来一个进程包含tomcat,使用ps -ef | grep tomcat | grep -v "grep"|awk '{print$2}'
命令查看tomcat进程时,查询结果为:
这时调试shell时输出为:
在判断是否已有tomcat进程时出现问题,导致kill进程无法杀死进程,重新部署项目时也不会启动tomcat,也看不出报错信息。
最简单的方式是使用Jenkins部署时,不适用shell查看日志,这时使用上述命令查看的进程为:
再次使用jenkins部署项目时,调试结果为:
这次正常重启。
也可使用其他方式解决此问题,判断进程是否包含查看日志的进程,若包含则什么都不做。只针对重启tomcat的操作进行执行。
或者是在grep tomcat判断是否有tomcat进程时写上特定路径,但是这种方式针对一个服务器上多个tomcat时需要准备多个脚本。