公司测试服里有很多个tomcat,我参与的项目的那台tomcat,一天会挂上好几次。
监控系统一直发邮件,觉得实在烦,就写了个监控tomcat的脚本放上去跑。等过两天有空了再去研究tomcat挂掉的原因。
先贴上Shell代码:
- #!/bin/sh
- # function:自动监控tomcat进程,挂了就执行重启操作
- # author:huanghong
- # DEFINE
-
- # 获取tomcat PPID
- TomcatID=$(ps -ef |grep tomcat |grep -w 'tomcat_cardniu_stat'|grep -v 'grep'|awk '{print $2}')
-
- # tomcat_startup
- StartTomcat=/usr/local/tomcat-6.0.41/tomcat_cardniu_stat/bin/startup.sh
-
-
- #TomcatCache=/usr/apache-tomcat-5.5.23/work
-
- # 定义要监控的页面地址
- WebUrl=http://test.cardniu.com/stat-cardniu/login
-
- # 日志输出
- GetPageInfo=/dev/null
- TomcatMonitorLog=/tmp/TomcatMonitor.log
-
- Monitor()
- {
- echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
- if [ $TomcatID ];then
- echo "[info]tomcat进程ID为:$TomcatID."
- # 获取返回状态码
- TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
- if [ $TomcatServiceCode -eq 200 ];then
- echo "[info]返回码为$TomcatServiceCode,tomcat启动成功,页面正常."
- else
- echo "[error]访问出错,状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
- echo "[error]开始重启tomcat"
- kill -9 $TomcatID # 杀掉原tomcat进程
- sleep 3
- #rm -rf $TomcatCache # 清理tomcat缓存
- $StartTomcat
- fi
- else
- echo "[error]进程不存在!tomcat自动重启..."
- echo "[info]$StartTomcat,请稍候......"
- #rm -rf $TomcatCache
- $StartTomcat
- fi
- echo "------------------------------"
- }
- Monitor>>$TomcatMonitorLog
通过ps -ef 及 grep 命令定位到对应项目的tomcat,获取到进程ID。
GetPageInfo = /dev/null,无底洞,不输出。
先判断进程是否存在,不存在则重启,存在则进入状态判断,获取访问请求页的responseCode,不等于200的话也进行重启。
保存shell 名字为monitor.sh
然后在终端输入
在打开的脚本页输入:
- */5 * * * * /usr/local/tomcat-6.0.41/tomcat_cardniu_stat/monitor.sh
5分钟进行一次监控。