先是主程序:
import java.io.BufferedReader;
import java.io.FileReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
public class CheckTomcat {
private static String tomcatroot="";
private static String monitorurl="";
private static void checkTomcatIsAlive(String myurl) throws NullPointerException {
String s;
boolean isTomcatAlive = false;
java.io.BufferedReader in;
try {
System.out.println(">>>>>>检测URL:"+myurl);
URL url = new URL(myurl);
URLConnection con = url.openConnection();
con.setConnectTimeout(1000);
con.setReadTimeout(4000);
in = new java.io.BufferedReader(new java.io.InputStreamReader(con.getInputStream()));
while ((s = in.readLine()) != null) {
if (s.length() > 0) {// 如果能够读取到页面则证明可用,tomcat正常,否则继续后面的重启tomcat操作。
return;
}
}
in.close();
}catch (Exception ex) {
//ex.printStackTrace();
System.out.println("*************该URL有误或不可访问!");
}
/*if (isTomcatAlive) {
System.out.println("<" + new Date()+ "> Tomcat is alive but not response!");
stopTomcat();
}*/
RunTomcat runt=new RunTomcat();
runt.startTomcat(tomcatroot);
}
/*public static void stopTomcat() {
try {
//java.lang.Process p = java.lang.Runtime.getRuntime().exec("net stop /"Apache Tomcat/"");
java.lang.Process p = java.lang.Runtime.getRuntime().exec(tomcatroot+"bin//shutdown.bat");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
String s;
String t = "Using JRE_HOME";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}
System.out.println("<" + new Date() + "> Tomcat is stop "+ (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}*/
public static void main(String[] args) {
System.out.println("********************************************************");
System.out.println("====本程序自动检测Tomcat运行状况,必要时自动重启Tomcat。====");
System.out.println("********************************************************");
init_config();
if(monitorurl.equals(""))monitorurl="http://localhost:8080/ExchangeWeb/checkTomcat/monitor.jsp";
if(tomcatroot.equals(""))tomcatroot="F://tomcat-6.0.20//";
if(!tomcatroot.endsWith("//"))tomcatroot+="//";
while (true) {
try {
String random="?random="+Math.random() * 65535;//=====处理数据缓存问题======
CheckTomcat.checkTomcatIsAlive(monitorurl+random);
Thread.sleep(5000);
System.out.println("========================checking at <"+new Date()+">");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
static private void init_config() {
try{
CheckTomcat me=new CheckTomcat();
String maindir=me.getClass().getResource("/").toURI().getPath();
System.out.println(">>>>>>配置文件目录:"+maindir);
String sLine;
String filename=maindir+"config.xml";
BufferedReader buffReader = new BufferedReader(new FileReader(filename));
while((sLine = buffReader.readLine())!=null)
{
sLine = sLine.trim();
if(sLine.trim()!="" && !sLine.equals("")){
if(sLine.toLowerCase().startsWith("tomcatroot")){
int npos=sLine.indexOf("tomcatroot");
npos+="tomcatroot".length();
tomcatroot=sLine.substring(npos).trim();
if(tomcatroot.startsWith("="))tomcatroot=tomcatroot.substring(1);
}
else if(sLine.toLowerCase().startsWith("monitorurl")){
int npos=sLine.indexOf("monitorurl");
npos+="monitorurl".length();
monitorurl=sLine.substring(npos).trim();
if(monitorurl.startsWith("="))monitorurl=monitorurl.substring(1);
}
}
}
buffReader=null;
}catch(Exception e){
e.printStackTrace();
System.out.println("********************************************************");
System.out.println("====读取配置文件失败!系统无法运行,请与供应商联系。====");
System.out.println("********************************************************");
System.exit(0);
}
}
}
再是自动重启Tomcat线程类:
import java.util.Date;
public class RunTomcat extends Thread {
private static String tomcatroot="";
public void startTomcat(String root) {
this.tomcatroot=root;
System.out.println(">>>>>>Tomcat即将启动。。。");
System.out.println(">>>>>>Tomcat根目录:"+tomcatroot);
try {
//java.lang.Process p = java.lang.Runtime.getRuntime().exec("net stop /"Apache Tomcat/"");
java.lang.Process p = java.lang.Runtime.getRuntime().exec(tomcatroot+"bin//shutdown.bat");
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(3000);//等待shutdown结束
//RunTomcat me=new RunTomcat();
//String maindir=me.getClass().getResource("/").toURI().getPath();
//java.lang.Process p = java.lang.Runtime.getRuntime().exec(maindir+"checkTomcat.bat");
java.lang.Process p = java.lang.Runtime.getRuntime().exec(tomcatroot+"bin//startup.bat");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
/*String s;
boolean restart = false;
String t = "Server startup in";
while ((s = in.readLine()) != null) {
System.out.println(s);
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}*/
System.out.println(">>>>>>Tomcat start at <" + new Date() + ">");
} catch (Exception e) {
e.printStackTrace();
}
}
}
接着是检测tomcat是否活动monitor.jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
out.println("path=" + path + "<br>");
out.println("basePath=" + basePath + "<br>");
out.println("ok<br>");
%>
然后是config.xml配置文件:
tomcatroot=F:/tomcat-6.0.20/
monitorurl=http://localhost:8080/ExchangeWeb/checkTomcat/monitor.jsp
最后是checkTomcat.bat批处理文件:
@echo off
rem=========第一步:配置下面的JAVA_HOME为JDK目录==========#
@set JAVA_HOME=C:/Program Files/Java/jdk1.6.0_14
rem=========第二步:配置下面的CATALINA_HOME为Tomcat目录==========#
@set CATALINA_HOME=F:/tomcat-6.0.20
@set PATH=%JAVA_HOME%/bin/;
@set CLASSPATH=%JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/lib/tools.jar;%CATALINA_HOME%/lib/servlet-api.jar;%CATALINA_HOME%/lib/jsp-api.jar;
java CheckTomcat
测试时,只要双击执行checkTomcat.bat文件即可。
相关推荐
Tomcat运行状态检测 - **原理**:通过发送HTTP请求到Tomcat服务器上的某个路径(如`/manager/status`),然后根据返回的状态码及内容判断Tomcat是否处于正常运行状态。 - **实现方式**: - **创建URL对象**:使用...
本文将深入探讨如何使用提供的压缩包文件来实现对Tomcat运行状态的监控,并在出现假死或异常停止时进行自动重启。这个解决方案主要依赖于一个批处理脚本"监控tomcat.bat",以及可能需要的辅助工具如"curl.exe"。 ...
当检测到Tomcat服务假死或异常时,自动重启过程可以由同一脚本触发。在Windows环境下,可以使用Taskkill命令结束Tomcat进程,然后使用启动命令(如`startup.bat`)重新启动Tomcat。确保脚本具有适当的权限,以便能够...
10秒检测tomcat网站是否访问正常,访问异常30秒内完成tomcat重启并继续监控,傻瓜式修改两个地方,第一个要监控的 url地址支持https,第二个是tomcat的安装目录,就可以了。好用记得给个大大的好评。bat文件每一行都...
4. **集成Zabbix或Nagios**:这些专业的监控系统不仅可以监控Tomcat,还可以在检测到异常时执行自定义操作,比如发送报警邮件或自动重启。 5. **使用Spring Boot Actuator**:如果你的应用是基于Spring Boot,可以...
【描述】中提到的“利用系统进程进行监控”是指通过监测TOMCAT的服务进程来判断其运行状态。在Windows系统中,这通常涉及到使用任务管理器或者命令行工具(如`tasklist`或`jps`)来检查与TOMCAT相关的进程是否正常...
为了保证服务的连续性和稳定性,我们需要编写一个批处理脚本来监控Tomcat的状态,并在检测到异常时自动重启Tomcat。 "listener.bat" 文件很可能是这个自动重启脚本的核心部分。批处理脚本通常由一系列命令组成,...
为了解决这个问题,我们可以编写一个监控并自动重启Tomcat的Shell脚本来确保服务的高可用性。以下将详细介绍如何创建这样的脚本。 首先,我们需要理解Linux Shell脚本的基本结构。Shell脚本是Linux操作系统中的一种...
这种守护过程通常由一个额外的程序或脚本实现,它监控Tomcat的运行状态,并在检测到服务异常时执行重启操作。 描述中提到的“自动重启已挂掉的tomcat服务器,省去人工人力,保证服务器的正常运行”,意味着通过自动...
- `WebUrl`:定义用于检测Tomcat是否正常运行的URL。 - `TomcatMonitorLog`:定义日志文件的路径。 ##### 2. **核心逻辑分析** - **监控函数Monitor()**: - 使用`if`语句检查`TomcatID`是否为空,以此判断...
【描述】中的脚本实现了一个自动重启功能,即当Tomcat在Windows环境下异常退出时,能够自动触发重启过程。这一功能对于提高系统的稳定性至关重要,因为它可以减少因服务器停机导致的业务中断时间。通常,这种自动化...
在这个场景下,我们可能会使用C#编写一个程序来监控Tomcat的状态,并在检测到其关闭时触发重启。 以下是一些关键知识点: 1. **Tomcat服务器**:Tomcat是一款开源的Java Servlet容器,用于运行基于Java的Web应用...
1. **状态监测**:监控程序通过定期检查Tomcat服务器的运行状态来判断服务是否正常。这通常涉及到与Tomcat管理接口的交互,例如通过JMX(Java Management Extensions)来获取服务器的运行信息,如线程池、内存使用、...
修改应用后,无需重启服务器,Tomcat可以检测到变化并自动更新。 8. **安全性**:Tomcat提供多种安全机制,如角色授权、SSL加密、form-based认证等,确保Web应用的安全性。 9. **JMX管理**:通过Java Management ...
- 功能:检查Tomcat是否处于运行状态,如果未运行,则自动重启。 - 实现方法:尝试访问一个已知的URL(例如`http://www.mowker.com/`),如果访问成功,则表示Tomcat正在运行;如果访问失败,则调用`TomcatRestart...
在"Run" -> "Edit Configurations"中,选择你的Tomcat服务器配置,然后在"Deployment"选项卡下,确保"Update classes and resources"被选中,这样在运行时IDEA会自动更新已部署的资源。 尽管上述设置通常可以解决大...
首先,理解问题的核心在于如何使Tomcat在运行状态下感知到代码的变更并自动热部署。MyEclipse内置了对Web应用的热部署支持,但默认情况下可能并未开启。以下是一些步骤来启用这个功能: 1. **配置MyEclipse的发布...
此程序的核心功能在于帮助用户监控Tomcat服务器的运行状态,特别是在服务器出现无响应时,能自动进行重启操作,确保服务的持续性和稳定性。 【描述】中提到的“Tomcat 服务器监控软件 1.3”是一个针对Tomcat应用...
Linux定时脚本监控tomcat是否假死或出现运行异常,若出现异常则自动重启。
本文提供的实例代码展示了如何使用Java来检测Tomcat是否宕机,并在检测到宕机时自动控制重启,这对于保障服务的可用性至关重要。以下是该方法的核心知识点: 1. **HTTP连接检查**:首先,通过创建一个`URL`对象并...