Shell 定时5分钟一次监控Tomcat状态,自动重启

来源:互联网 发布:阿儿法营编程学校 编辑:程序博客网 时间:2024/05/21 07:06

公司测试服里有很多个tomcat,我参与的项目的那台tomcat,一天会挂上好几次。

监控系统一直发邮件,觉得实在烦,就写了个监控tomcat的脚本放上去跑。等过两天有空了再去研究tomcat挂掉的原因。 

先贴上Shell代码:

[plain] view plain copy
  1. #!/bin/sh  
  2. # function:自动监控tomcat进程,挂了就执行重启操作  
  3. # author:huanghong  
  4. # DEFINE  
  5.   
  6. # 获取tomcat PPID  
  7. TomcatID=$(ps -ef |grep tomcat |grep -w 'tomcat_cardniu_stat'|grep -v 'grep'|awk '{print $2}')  
  8.   
  9. # tomcat_startup  
  10. StartTomcat=/usr/local/tomcat-6.0.41/tomcat_cardniu_stat/bin/startup.sh  
  11.   
  12.   
  13. #TomcatCache=/usr/apache-tomcat-5.5.23/work  
  14.   
  15. # 定义要监控的页面地址  
  16. WebUrl=http://test.cardniu.com/stat-cardniu/login  
  17.   
  18. # 日志输出  
  19. GetPageInfo=/dev/null  
  20. TomcatMonitorLog=/tmp/TomcatMonitor.log  
  21.   
  22. Monitor()  
  23. {  
  24.   echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"  
  25.   if [ $TomcatID ];then  
  26.     echo "[info]tomcat进程ID为:$TomcatID."  
  27.     # 获取返回状态码  
  28.     TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})  
  29.     if [ $TomcatServiceCode -eq 200 ];then  
  30.         echo "[info]返回码为$TomcatServiceCode,tomcat启动成功,页面正常."  
  31.     else  
  32.         echo "[error]访问出错,状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"  
  33.         echo "[error]开始重启tomcat"  
  34.         kill -9 $TomcatID  # 杀掉原tomcat进程  
  35.         sleep 3  
  36.         #rm -rf $TomcatCache # 清理tomcat缓存  
  37.         $StartTomcat  
  38.     fi  
  39.   else  
  40.     echo "[error]进程不存在!tomcat自动重启..."  
  41.     echo "[info]$StartTomcat,请稍候......"  
  42.     #rm -rf $TomcatCache  
  43.     $StartTomcat  
  44.   fi  
  45.   echo "------------------------------"  
  46. }  
  47. Monitor>>$TomcatMonitorLog  

通过ps -ef 及 grep 命令定位到对应项目的tomcat,获取到进程ID。

GetPageInfo = /dev/null,无底洞,不输出。

先判断进程是否存在,不存在则重启,存在则进入状态判断,获取访问请求页的responseCode,不等于200的话也进行重启。

保存shell 名字为monitor.sh


然后在终端输入

[plain] view plain copy
  1. crontab -e   

在打开的脚本页输入:

[plain] view plain copy
  1. */5 * * * * /usr/local/tomcat-6.0.41/tomcat_cardniu_stat/monitor.sh  
5分钟进行一次监控。