linux系统tomcat应为被定时任务脚本监控自动部署,服务器重启导致同一个tomcat出现很多进程,kill -9杀死又出现等一系列问题解决。
#ps -ef|grep tomcat查看tomcat进程,同一个tomcat有很多一样的进程,kill -9杀完过一会又会出现,且pid随时发生改变。
我首先想到第一时间去tomcat的bin目录下去执行#./shutdown命令想正常关闭tomcat,也无法关闭。
于是去谷歌各种找方法,都试过一遍,但是大部分还是让我kill -9 命令杀父进程,都是没法有效解决我的问题的。还有的是让我修改bin/catalina.sh文件shutdown.sh的文件加一个pid,关闭的时候直接通过配置的pid去关tomcat,但是我的tomcat工程是通过脚本文件自动循环部署工程的,如果把pid写死的话,肯定会影响以后的项目部署,于是放弃了这个方法(ps:这方法我直接没试,不不知道行不行);
搞了半天,很头疼,我决定先去把定时任务停了,防止脚本每半个小时自动执行检测部署(如果检测到域名无法访问项目,会自动重启tomcat)任务。
查看定时任务命令:crontab -l
修改定时任务命令:crontab -e
如下:
[root@UbitechLinux31 bin]# crontab -l
#*/30 * * * * /ttcShell/refreshRelease/refresh.sh >>/ttcShell/refreshRelease/refresh.txt 2>&1
#*/30 * * * * /usr/tomcat_pool/tomcat_ttc_2/refreshMySql/refresh.sh 2>>/usr/tomcat_pool/tomcat_ttc_2/refreshMySql/refresh.txt
#29 17 * * * /home/refresh/refresh.sh >>/home/refresh/refresh.txt 2>&1
20 01 * * * /data/ttcDataBackup.sh > /data/ttcDataBackup.txt 2>&1
定时任务已经被我注释掉了(最好再执行下让修改定时任务重启生效命令:# /etc/init.d/crond restart),附上可能会用到的查看定时任务日志的命令:#vi /var/log/cron
停了之后我半个小时看日志,的确没有脚本执行日志了。
可tomcat的日志里面去一看,照样在执行启动任务,跟她吗死循环一样,蛋疼。
原来是应为虽然定时任务已经关了,但是应为linux系统进程中还有那个监控脚本的进程在!!
#ps -ef|grep ttcShell (你脚本名字)
查看这个脚本相关的所有进程,全部kill -9 加端口杀掉!
然后再去tomcat目录启动项目
(之前是没发现有脚本进程,下面的文章是之前的解决方案,并不完善,上面这几行是补充)
现在的情况就是杀也杀不死,关也关不掉,而且定时任务脚本都已经注释掉了。
于是继续谷歌百度找方法,找到一个很有效的方法可以杀死全部tomcat进程
杀掉所有tomcat进程(这里的路径视情况而定,ps -ef|grep tomcat 是可以看到路径的)
killall -9 /usr/java/jdk1.8.0_112/jre/bin/java
执行了过后,ps -ef | grep tomcat
查看tomcat进程果然都没了,这个命令果然牛逼!!!
心里相当开心,以为只要关掉了那些令人恶心的无限出现tomcat进程就好办了,然后事实证明我还是太年轻!!
既然tomcat能关了,那么只要再去启动下,项目应该就能访问了!
于是去到/bin 目录下执行#./startup.sh
结果她妈的蛋疼了,出现各种错。。。
打开tomcat的日志/log里面的catalina.2017-03-08.log文件查看错误信息
又是一痛谷歌百度,还是没法解决,不过算是知道了,问题出现的重点是tomcat启动The session manager failed to start
好像跟session有关,于是,自己跑去到tomcat目录下的/confg和/work目录下把Catalina文件删除了。
然后去/bin目录下启动tomcat!!
ok,接着去tail -f 查看tomcat打印日志。没有报错!然后访问项目,正常!!!! 万幸,解决了。
我猜想可能是之前的无限次进程卡死导致Catalina文件有问题,会影响到tomcat启动等等以及上面抱的session相关的问题吧,只要删掉那两个文件,然后重新启动tomcat又会生成新的Catalina的!
本人也是linux菜鸟,本文目的只是记录自己工作中遇到的一些问题,以便以后遇到同样的错误,可以有迹可循。哈哈,勿喷!