前几天由于我前一个公司(刚刚离职- -!)的tomcat总是down(进程存在,无法对外提供服务),由于特征状态不明显不能根据进程来判断,所以我用对比tomcat的catalina.out日志文件最后修改时间的方式来进行,因为我发现当服务器无法提供业务是,日志文件就停止打印了,并且写了一个脚本,并通过crond来执行,脚本的内容如下:

  1. #!/bin/bash  
  2. sleep 5  
  3. export JAVA_HOME=/usr/jdk  
  4. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
  5. export PATH=$PATH:$JAVA_HOME/bin  
  6. x=`ls -l /usr/local/tomcat/logs/| grep catalina.out| awk '{print $8}'` && y=`date | awk  '{print $4}' | awk -F: '{print $1":"$2}'`  
  7. [[ $x = $y ]] &&  exit  
  8. [[ $x != $y ]] && ps -ef | grep tomcat | grep -v grep | cut -c 9-15 | xargs kill -9   
  9. /usr/local/tomcat/bin/startup.sh 

我先简单解释一下这个脚本:

        由于信息写入日志需要一个过程,大家可以试一下把一个很长的文件直接重定向到一个新文件,在重定向未结束前,这个新文件的修改时间是不会变得,所以如果不先sleep一定的时间可能由于一个写入操作未完成而脚本误判断tomcat已经down了,所以脚本开始先设置了sleep 5;

        第二段到第四段是设置tomcat的环境变量;

        第五段是获取系统的当前时间和tomcat日志文件的最后修改时间

        第六段和第七段判断两个时间是否一致,如果一致则退出脚本;如果不一致则先杀掉已经死掉的tomcat进程并重启tomcat。

        为了统计大概多长时间tomcat会死掉,还可以在最后加上echo一段字符。