参照网上的脚本结合自己的实际环境写的一段tomcat自动重启的脚本,判断当tomcat对cpu的使用率超过70%时就自动重启,记录一下

 

 
  
  1. #!/bin/sh 
  2.  # func:自动监控tomcat脚本并且执行重启操作 
  3.  # author:yaozhiyong 
  4.  # date:12/12/2012 
  5.  # 定义环境变量 
  6.  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.5.0_11/bin 
  7.  # 获取程序所在路径 
  8.   
  9.  PRG="$0" 
  10.   
  11.  while [ -h "$PRG" ]; do 
  12.    ls=`ls -ld "$PRG"
  13.    link=`expr "$ls" : '.*-> \(.*\)$'
  14.    if expr "$link" : '/.*' > /dev/nullthen 
  15.      PRG="$link" 
  16.    else 
  17.      PRG=`dirname "$PRG"`/"$link" 
  18.    fi 
  19.  done 
  20.   
  21.  # Get standard environment variables 
  22.  PRGDIR=`dirname "$PRG"
  23.   
  24.  # Only set CATALINA_HOME if not already set 
  25.  [ -z "$TOMCAT_HOME" ] && TOMCAT_HOME=`cd "$PRGDIR/.." >/dev/null; pwd` 
  26.  echo "tomcathome: $TOMCAT_HOME" 
  27.   
  28.  # 获取tomcat进程ID 
  29.  TomcatPID=$(ps -ef|grep java|grep "$TOMCAT_HOME"|awk '{print $2}'
  30.  echo "[info]TomcatPID: $TomcatPID" 
  31.  # tomcat启动程序(这里注意tomcat实际安装的路径) 
  32.  StartTomcat=$TOMCAT_HOME/bin/startup.sh 
  33.  TomcatCache=$TOMCAT_HOME/work 
  34.  # 定义要监控的页面地址  
  35.  WebUrl=http://127.0.0.1:8080/monitor.jsp 
  36.  # 日志输出 
  37.  GetPageInfo=/tmp/TomcatMonitor.Info 
  38.  TomcatMonitorLog=/tmp/TomcatMonitor.log 
  39.  TomcatCpuCount=/tmp/TomcatCpuCount.info 
  40.  TomcatLock=/tmp/Tomcat.lock 
  41.  MonitorHttp() 
  42.  { 
  43.    echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]" 
  44.    if [ $TomcatPID ];then  # 这里判断TOMCAT进程是否存在 
  45.       echo "[info]当前tomcat进程ID为:$TomcatPID,继续检测页面..." 
  46.       # 检测是否启动成功(成功的话页面会返回状态"200"
  47.       TomcatServiceTime=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{time_total}) 
  48.       if [ TomcatServiceTime -eq 200 ];then 
  49.          echo "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常......" 
  50.       else 
  51.          echo "[error]tomcat页面出错,请注意......状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo" 
  52.          echo "[error]页面访问出错,开始重启tomcat" 
  53.          kill -9 $TomcatPID   # 杀掉原tomcat进程 
  54.          sleep 3 
  55.          rm -rf $TomcatCache # 清理tomcat缓存 
  56.          $StartTomcat 
  57.       fi 
  58.    else 
  59.       echo "[error]tomcat进程不存在!tomcat开始自动重启..." 
  60.       echo "[info]$StartTomcat,请稍候......" 
  61.       rm -rf $TomcatCache 
  62.       $StartTomcat  
  63.    fi 
  64.    echo "------------------------------" 
  65.  } 
  66.   
  67.  MonitorCPU() 
  68.  { 
  69.    echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]" 
  70.    if [ $TomcatPID ];then  # 这里判断TOMCAT进程是否存在 
  71.        
  72.       TomcatCpuRate=$(top -b -n1 |awk '{if($1=='$TomcatPID')print $9}'
  73.       echo "[info]当前tomcat进程ID为:$TomcatPID,CPU使用率为 $TomcatCpuRate %..." 
  74.   
  75.       TomcatCpuState=$(echo $TomcatCpuRate|awk -v bi=70 '{print($1>bi)?"1":"0"}'
  76.        
  77.       echo "cpustate $TomcatCpuState" 
  78.        
  79.       if [ $TomcatCpuState -eq 1 ]; then 
  80.           if [ -e $TomcatCpuCount ]; then 
  81.              tmpCount=$(cat $TomcatCpuCount |awk '{print $1+1}'
  82.              echo "[warning] [$(date +'%F %H:%M:%S')] tomcat运行异常 CPU:$TomcatCpuRate 累计$tmpCount次" 
  83.              echo $tmpCount >$TomcatCpuCount 
  84.           else 
  85.              echo "[warning] [$(date +'%F %H:%M:%S')] tomcat运行异常 CPU:$TomcatCpuRate 累计1次" 
  86.              echo "1" >$TomcatCpuCount 
  87.           fi 
  88.       else 
  89.           echo "[info] [$(date +'%F %H:%M:%S')] tomcat运行正常......" 
  90.           echo "0" >$TomcatCpuCount 
  91.       fi 
  92.        
  93.       TomcatErrCount=$(cat $TomcatCpuCount|awk '{print $1}'); 
  94.       echo "[print] TomcatErrCount=$TomcatErrCount" 
  95.        
  96.       if [ $TomcatErrCount -ge 3 ]; then 
  97.          echo "[error]tomcat造成cpu负荷太重,需要要重启" 
  98.          echo "[error] [$(date +'%F %H:%M:%S')] 开始重启tomcat" 
  99.          if [ -e $TomcatLock ];then 
  100.            echo "tomcat 正在重启..." 
  101.          else 
  102.            echo "restarting..." >$TomcatLock 
  103.            kill -9 $TomcatPID   # 杀掉原tomcat进程 
  104.            sleep 3 
  105.            rm -rf $TomcatCache # 清理tomcat缓存 
  106.            $StartTomcat 
  107.            sleep 1m 
  108.            echo "0" >$TomcatCpuCount 
  109.            rm -rf $TomcatLock 
  110.            echo "tomcat 完成重启..." 
  111.             
  112.          fi 
  113.       fi 
  114.   
  115.    else 
  116.       echo "[error]tomcat进程不存在!tomcat开始自动重启..." 
  117.       echo "[info]$StartTomcat,请稍候......" 
  118.       rm -rf $TomcatCache 
  119.       $StartTomcat  
  120.    fi 
  121.    echo "------------------------------" 
  122.  } 
  123.   
  124.  MonitorCPU >>$TomcatMonitorLog 
  125.