如何监控tomcat进程并杀死它

        我不知道为什么在linux上有时候./shutdown.sh不能关闭掉tomcat,我估计是因为有其它的进程在使用它,于是每次都只能手动的kill -9去杀掉他,后来我嫌麻烦于是自己写了个监控PID的脚本,然后用JAVA程序去访问我的页面,如果异常或者超时,我就调用这个监控去杀掉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 阅读(1688) 评论(0)  编辑  收藏 所属分类: JavaLinux


只有注册用户登录后才能发表评论。


网站导航:
 
<2011年3月>
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(4)

随笔分类

相册

相册

搜索

最新评论