如何監控tomcat進程并殺死它

                  我不知道為什么在linux上有時候./shutdown.sh不能關閉掉tomcat,我估計是因為有其它的進程在使用它,于是每次都只能手動的kill -9去殺掉他,后來我嫌麻煩于是自己寫了個監控PID的腳本,然后用JAVA程序去訪問我的頁面,如果異?;蛘叱瑫r,我就調用這個監控去殺掉tomcat,并重新啟動它
                  首先我要準備一個腳本叫做killtomcat.sh,哈哈,監控的原理很簡單通過ps -ef|grep 來實現
           1#!/bin/bash
           2export JAVA_HOME=/local/akazam/servers/java
           3export CATALINA_HOME=/local/akazam/servers/tomcat
           4export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/td.jar:$JAVA_HOME/jre/lib/rt.jar:$CATALINA_HOME/lib/servlet-api:$CATALINA_HOME/lib/catalina-ant.jar:$CATALINA_HOME/lib/catalina.jar:$CATALINA_HOME/lib/annotations-api.jar:$CATALINA_HOME/lib/tomcat-coyote.jar:$CATALINA_HOME/lib/tomcat-dbcp.jar:$CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/commons-pool.jar:$CATALINA_HOME/lib/common-dbcp.jar:$CATALINA_HOME/lib/catalina-tribes:$CATALINA_HOME/lib/catalina-ha.jar:.
           5export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$CATALINA_HOME/bin:$PATH
           6TOMCAT_PATH=/local/akazam/servers/tomcat/bin
           7if [ $# -eq 0 ]
           8    then
           9        echo "ERROR:Usage: process argument" 1>&2
          10        echo "eg:If you want to restart tomcat you can enter ./restart.sh tomcat!" 1>&2
          11        exit 1
          12fi
          13path=$1
          14set $(ps -ef|grep $path)
          15pid=$2
          16flaggrep=$8
          17echo "tomcat pid : $pid,flag : $flaggrep"
          18
          19if [ "$flaggrep" = "grep" -"$flaggrep" = "/bin/bash" ]
          20then
          21 echo "no thread start"
          22else
          23#kill tomcat
          24kill -9 $pid
          25sleep 3
          26echo "killed thread"
          27fi
          28#start tomcat
          29cd $TOMCAT_PATH
          30./startup.sh
          31echo "tomcat restart!" 
                  接下來就要寫個JAVA類來監控了
            1package com.akazam.monitor;
            2
            3import java.io.BufferedReader;
            4import java.io.File;
            5import java.io.IOException;
            6import java.io.InputStreamReader;
            7import java.net.HttpURLConnection;
            8import java.net.URL;
            9import java.util.Date;
           10
           11public class MonitorTomcat {
           12    public long getLoadMS(String url){
           13        long time1=System.currentTimeMillis();
           14        
           15        int i=0;
           16         // 帶參數目錄名方式運行 dir 命令
           17        Runtime runtime = Runtime.getRuntime();
           18        String classDir = this.getClass().getResource("/").getPath();
           19        String command= classDir+"killtomcat.sh tomcat/";
           20        try 
           21            URL target = new URL(url); 
           22            HttpURLConnection conn = (HttpURLConnection) target.openConnection();  
           23            conn.setRequestMethod("GET");  
           24            conn.connect(); 
           25            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
           26            while (in.readLine() != null){
           27                i++;
           28            }
            
           29        }
          catch(Exception e){  
           30            //重啟tomcat
           31            try {
           32                Process process = runtime.exec(new String[] {"/bin/bash","killtomcat.sh","tomcat/"},null,new File(classDir));
           33                System.out.println(e.getMessage()+"\r\nRun command is:"+command);
           34                if(process!=null)
           35                {
           36                    BufferedReader in = new BufferedReader(new InputStreamReader(
           37                              process.getInputStream()));
           38                    String line;
           39                    while ((line = in.readLine()) != null{
           40                        System.out.println(line+"\r\n");
           41                    }

           42                     try {
           43
           44                                   if (process.waitFor() != 0{
           45
           46                                       System.err.println("exit value = " + process.exitValue());
           47
           48                                   }
           
           49
           50                                 }

           51
           52                                 catch (InterruptedException ec) {  
           53
           54                                    System.err.println(ec);
           55
           56                                }

           57
           58
           59                            
           60                }

           61                else return -1;
           62            }
           catch (IOException e1) {
           63                // TODO Auto-generated catch block
           64                //e1.printStackTrace();
           65                System.out.println(e1.getMessage()+"\r\n");
           66            }

           67            
           68        }
            
           69        long time2 = new Date().getTime();  
           70        long result = time2-time1;
           71        if(result>60000)
           72        {
           73            //重啟tomcat
           74            try {
           75                
           76                Process process = runtime.exec(new String[] {"/bin/bash","killtomcat.sh","tomcat/"},null,new File(classDir));
           77                if(process!=null)
           78                {
           79                    BufferedReader in = new BufferedReader(new InputStreamReader(
           80                              process.getInputStream()));
           81                            String line;
           82                            try {
           83                                while ((line = in.readLine()) != null{
           84                                 System.out.println(line+"\r\n");
           85                                }

           86                                 try {
           87
           88                                       if (process.waitFor() != 0{
           89
           90                                           System.err.println("exit value = " + process.exitValue());
           91
           92                                       }
           
           93
           94                                     }

           95
           96                                     catch (InterruptedException ec) {  
           97
           98                                        System.err.println(ec);
           99                                        System.out.println(ec.getMessage()+"\r\n");
          100                                    }

          101
          102                            }
           catch (IOException e) {
          103                                // TODO Auto-generated catch block
          104                                e.printStackTrace();
          105                            }

          106                }

          107                else return -1;
          108            }
           catch (IOException e) {
          109                // TODO Auto-generated catch block
          110                  System.out.println(e.getMessage()+"\r\n");
          111            }

          112        
          113        }

          114    
          115        
          116        return result;
          117    }

          118    public static void main(Stringstrings)
          119    {
          120        if(strings.length>0)
          121        {
          122            String url = strings[0];
          123            long ts = new MonitorTomcat().getLoadMS(url);
          124            if(ts==-1) System.out.println("Comman exec Error!");
          125            else System.out.println("Load Page cost :"+ts);
          126        }

          127    }

          128}

          129




          posted on 2011-03-17 09:41 Cloud kensin 閱讀(1696) 評論(0)  編輯  收藏 所屬分類: JavaLinux

          <2011年3月>
          272812345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(4)

          隨筆分類

          相冊

          相冊

          搜索

          最新評論

          主站蜘蛛池模板: 社旗县| 云南省| 景泰县| 铜陵市| 吉首市| 乐亭县| 道孚县| 灵丘县| 丹寨县| 山阳县| 荔波县| 吴江市| 松桃| 海南省| 阜平县| 沁阳市| 曲阳县| 汝南县| 杂多县| 襄城县| 普定县| 抚顺县| 利川市| 理塘县| 子洲县| 景东| 东明县| 澄迈县| 荃湾区| 翁牛特旗| 馆陶县| 丹阳市| 崇阳县| 兰溪市| 福州市| 淮南市| 清流县| 宿松县| 通州区| 田林县| 阳曲县|