我不知道为什么在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" -o "$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