如何监控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 " - o " $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类来监控了
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 " - o " $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! "
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 }
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
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 }
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