如何监控tomcat进程并杀死它

        我不知道为什么在linux上有时候./shutdown.sh不能关闭掉tomcat,我估计是因为有其它的进程在使用它,于是每次都只能手动的kill -9去杀掉他,后来我嫌麻烦于是自己写了个监控PID的脚本,然后用JAVA程序去访问我的页面,如果异常或者超时,我就调用这个监控去杀掉tomcat,并重新启动它
        首先我要准备一个脚本叫做killtomcat.sh,哈哈,监控的原理很简单通过ps -ef|grep 来实现
 1 # !/bin/bash
 2 export JAVA_HOME =/ local / akazam / servers / java
 3 export CATALINA_HOME =/ local / akazam / servers / tomcat
 4 export 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 :.
 5 export PATH = $JAVA_HOME / bin : $JAVA_HOME / jre / bin : $CATALINA_HOME / bin : $PATH
 6 TOMCAT_PATH =/ local / akazam / servers / tomcat / bin
 7 if  [ $ #  -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
12 fi
13 path = $ 1
14 set $(ps  - ef | grep   $path )
15 pid = $ 2
16 flaggrep = $ 8
17 echo  " tomcat pid : $pid,flag : $flaggrep "
18
19 if  [  " $flaggrep "   =   " grep "   - " $flaggrep "   =   " /bin/bash "  ]
20 then
21  echo  " no thread start "
22 else
23 # kill tomcat
24 kill   - 9   $pid
25 sleep   3
26 echo  " killed thread "
27 fi
28 # start tomcat
29 cd  $TOMCAT_PATH
30 ./ startup . sh
31 echo  " tomcat restart! "  
        接下来就要写个JAVA类来监控了
  1 package  com.akazam.monitor;
  2
  3 import  java.io.BufferedReader;
  4 import  java.io.File;
  5 import  java.io.IOException;
  6 import  java.io.InputStreamReader;
  7 import  java.net.HttpURLConnection;
  8 import  java.net.URL;
  9 import  java.util.Date;
 10
 11 public   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                          
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值