设为首页 收藏本站
查看: 636|回复: 0

[经验分享] 如何监控tomcat进程并杀死它

[复制链接]

尚未签到

发表于 2017-1-26 11:57:06 | 显示全部楼层 |阅读模式
        我不知道为什么在linux上有时候./shutdown.sh不能关闭掉tomcat,我估计是因为有其它的进程在使用它,于是每次都只能手动的kill -9去杀掉他,后来我嫌麻烦于是自己写了个监控PID的脚本,然后用JAVA程序去访问我的页面,如果异常或者超时,我就调用这个监控去杀掉tomcat,并重新启动它
        首先我要准备一个脚本叫做killtomcat.sh,哈哈,监控的原理很简单通过ps -ef|grep 来实现
 1 DSC0000.gif #!/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 DSC0001.gif " 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
 11 DSC0002.gif DSC0003.gif public class MonitorTomcat {
 12 DSC0004.gif DSC0005.gif     public long getLoadMS(String url){
 13 DSC0006.gif         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 DSC0007.gif             }  
 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                          

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-333679-1-1.html 上篇帖子: Tomcat 原理解说:启动过程分析 下篇帖子: Tomcat JBOSS SSL配置大全(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表