Tomcat实现自动重启

原文:Tomcat实现自动重启

源代码下载地址:http://www.zuidaima.com/share/1550463736564736.htm

中秋国庆马上来临,由于客户的服务器不是很稳定,导致应用经常崩溃,所以写了个重启tomcat的程序,拿来给大家分享。 java后台程序 上图:大概思路是这样的:
1.监控服务器端是否能正常访问; 2.如果不能正常访问,则根据配置的信息来重新启动tomct服务 如果能正常访问则隔一段时间在监控。。。 其中用到了doc命令,代码注释很明确,不明白的可以问我

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;
/**
 * @describe:TomcatMonitor.java
 *
 * @date 2013-9-18
 * @author 小C www.zuidaima.com
 */
public class TomcatMonitor implements Runnable{
    String procName="tomcat6.exe"; //进程名称
    //String fullProcName="C:\\Tomcat6\\bin\\tomcat6.exe";
    String fullProcName=""; //tomcat6.exe绝对物理地址
    //String command="cmd.exe /c start";
    String command=""; //系统命令
    //String testHttp="http://127.0.0.1:8080";
    String testHttp="";  //测试连接地址
    int testIntervalTime=1;//测试连接间隔时间,单位为秒
    int waitIntervalTime=2; //等待测试间隔时间,单位为秒
    int testTotalCount=5; //测试连接总次数

    Thread thread=null;

	public TomcatMonitor(){
		InputStream in = TomcatMonitor.class.getResourceAsStream("config.properties");
		Properties p = new Properties();
		try {
			p.load(in);
			procName=p.getProperty("procName");
			fullProcName=p.getProperty("fullProcName");
			command=p.getProperty("command");
			testHttp=p.getProperty("testHttp");
			testIntervalTime=Integer.parseInt(p.getProperty("testIntervalTime"));
			waitIntervalTime=Integer.parseInt(p.getProperty("waitIntervalTime"));
			testTotalCount=Integer.parseInt(p.getProperty("testTotalCount"));

			System.out.println("初始化成功!");
		} catch (IOException e) {
			e.printStackTrace();
		}

		thread=new Thread(this);
		thread.start();
	}

	public void run() {
        String[] cmd = {"tasklist"};
        System.out.println("正在监控中...");
        int testCount=0;
		while(true){
			testCount=0;
			testCount++;
            boolean isrun=test();
            System.out.println("正在启动测试连接,尝试连接次数为:"+testCount+",结果为:"+(isrun==false?"失败.":"成功!"));
            while(!isrun){
            	if(testCount>=testTotalCount)break;
            	try {
					thread.sleep(testIntervalTime*1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				testCount++;
				System.out.println("正在启动测试连接,尝试连接次数为:"+testCount+",结果为:"+(isrun==false?"失败.":"成功!"));
            	isrun=test();
            }

            if(!isrun){
            	System.out.println("测试连接失败,正在重启tomcat");
            	try{
        	        Process proc = Runtime.getRuntime().exec(cmd);
        	        BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
        	        String string_Temp = in.readLine();
        	        while (string_Temp != null)
        	        {
    	                if(string_Temp.toLowerCase().indexOf(procName)!=-1){
    	                    Runtime.getRuntime().exec("Taskkill /f /im "+procName);
    	                    break;
    	                }
    	                string_Temp = in.readLine();
        	        }
        	        thread.sleep(5000);

        	        Process p=Runtime.getRuntime().exec(command+" \"\" \""+fullProcName+"\"");
        	        //Process p=Runtime.getRuntime().exec("net start tomcat6");
        	        System.out.println("重启tomcat成功");
        		}catch(Exception e){
        			e.printStackTrace();
        		}
            }

            try {
				thread.sleep(waitIntervalTime*1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

            isrun=test();
		}
	}

	public boolean test(){

		URL url=null;
		try {
			url = new URL(testHttp);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		try {
			URLConnection urlConn=url.openConnection();
			urlConn.setReadTimeout(15000);
			BufferedReader reader = new BufferedReader(new InputStreamReader( urlConn.getInputStream()));            //实例化输入流,并获取网页代码
				   String s;
				   while ((s = reader.readLine()) != null) {
				      return true;
				   }
		} catch (Exception e) {
          return false;
		}
		return false;
	}

	public static void main(String[] args) throws Exception{
		TomcatMonitor tm=new TomcatMonitor();
	}

}
时间: 2024-11-03 05:43:36

Tomcat实现自动重启的相关文章

如何设置tomcat定时自动重启

,今天笔者就跟大家分享一下如何设置tomcat定时自动重启. 第一:把Tomcat6安装成windows 2003服务. 1.首先检查tomcat\bin目录下是否有service.bat文件,如图: 2.开始——运行,输入CMD打开命令窗口,cd到tomcat\bin目录下,运行service.bat install命令,如图 回车,如果显示如下图所示,则安装成功: 3.开始——运行,输入services.msc打开服务,找到服务Apache Tomcat 6,如图: 4.启动此服务,在浏览器

Linux下实现tomcat定时自动重启

先新建重启脚本: cd /usr/local/tomcat/apache-tomcat-6.0.26      vi restart.sh 注:第一行为进入tomcat目录,第二行为新建restart.sh脚本. 写入以下内容: /usr/local/tomcat/apache-tomcat-6.0.26/bin/catalina.sh stop   sleep 1m   /usr/local/tomcat/apache-tomcat-6.0.26/bin/catalina.sh start 注

tomcat开机自动重启

vim /etc/rc.local 文件中写入启动语句 export JAVA_HOME=路径(/root/jdk) /opt/tomcat/bin/starup.sh start 启动脚本路径

linux上监控tomcat down掉后自动重启tomcat

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545; min-height: 14.0px } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px;

tomcat健康状态监控并自动重启短信报警

#!/bin/sh PATH=/usr/local/jdk1.5.0_19/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin JAVA_HOME=/usr/local/jdk1.5.0_19 CLASSPATH=.:/usr/local/jdk1.5.0_19/lib:/usr/local/jdk1.5.0_19/lib/t

在windows 上自动重启 tomcat 的方法

实现思路: Windows 上监控tomcat 进程并且自动重启的脚本 一类是 定时重启 tomcat 一类是 监控并重启 写一个守护tomcat进程 的脚本,间隔指定时间去访问 某个URL,对比HTTP 状态码是否为 200,如果不是,则重启tomcat. 实现方法: 下载一个 windows 对应版本的 curl.exe ,将文件放入  C:\Windows\System32 目录下 写一个 bat 脚本 @echo off set num=0 :loop set "httpcode=&qu

Tomcat监控助手-自动重启相关服务

功能说明 该小工具使用swing实现,实现监控某个服务地址,在异常时(连续3次访问不通)自动重启tomcat,并启动配置好的抓取项. 先看下效果图: 代码说明 下面是代码:配置文件TomcatMonitor.properties 1234567891011121314151617181920 #tomcat的启动脚本位置tomcat.home=D:/luckystar88/soft/apache-tomcat-8.5.6/bin/startup.bat#tomcat服务监控地址listen.ur

观察者模式实际应用:监听线程,意外退出线程后自动重启

摘要: 观察者模式,定义对象之间的一种一对多的依赖关系,当对象的状态发生改变时,所有依赖于它的对象都得到通知并且被自动更新.观察者模式在JDK中有现成的实现,java.util.Obserable. 首先说下需求:通过ftp上传约定格式的文件到服务器指定目录下,应用程序能实时监控该目录下文件变化,如果上传的文件格式符合要求,将将按照每一行读取解析再写入到数据库,解析完之后再将文件改名.(这个是原先已经实现了的功能,请看我的一篇文章java利用WatchService实时监控某个目录下的文件变化并

采用maven 对tomcat 进行自动部署

还是一如既往的废话不多说,直接开门见山 步骤如下: 1.下载一个绿色版完整的tomcat 包 2.进入tomcat/conf 文件下修改文件 tomcat-users.xml文件 <tomcat-users>      <role rolename="admin"/>      <role rolename="manager"/>      <role rolename="manager-gui"/>