我想用java监听weblogic服务的7001端口,如果发现weblogic的这个端口停止了,就启动它,怎么做!
要求: 一是用java代码怎么判断一个weblogic程序是否在运行
二是怎么用java代码启动一个固定端口weblogic服务
三是这个小程序在服务器上一直处于运行状态
高分求教!
我的想法是把weblogic安装为window的服务,然后通过“net”命令来启动或停止,而判断weblogic启动或停止的方法就是采用一个Socket连接过去,如果连接异常就表示没有启动。下面是我针对Mysql做类似的工作:
[code="java"]
public class RunCommand {
public static void main(String[] args) throws Exception {
boolean run = false;
try {
Socket socket = new Socket("localhost" , 3306);
run = socket.isConnected();
} catch (ConnectException e) {
System.out.println("Mysql has stop");
}
if (run) {
System.out.println("Mysql is running");
} else {
System.out.println("Start to MySQL");
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec("net start MySQL");
// p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = reader.readLine();
while(line!=null) {
System.out.println(line);
line=reader.readLine();
}
}
}
}
[/code]
public class SocketDemo {
public static void main(String[] args) {
/**服务重启开关 */
final RestartSwitch restartSwitch = new RestartSwitch();
/**服务程序进程*/
new ServerDemo(restartSwitch).start();
/**重启执行进程*/
new RstartExcuter(restartSwitch).start();
}
}
/**
服务重启开关
*/
class RestartSwitch {
boolean isRestart;
/** 打开重新启动 */
public void onRestart() {
isRestart = true;
}
/** 关闭重新启动 */
public void offRestart() {
isRestart = false;
}
/** 是否要重启起服务 true 重启 false 不重启 */
public boolean isRestart() {
return isRestart;
}
}
/**
根据服务运行状态,设置开关的开关状态
/
class ServerDemo extends Thread {
/* 重启开关 */
final RestartSwitch restart;
private ServerSocket server= null;
private Socket client = null;
private int port = 7001;
/**@param restart服务开关*/
public ServerDemo(RestartSwitch restart) {
this.restart = restart;
}
public void run() {
try {
restart.offRestart();//服务启动,关闭开关
server = new ServerSocket(port);
client = server.accept();
// TODO 处理连接进来的client
} catch (IOException e) {
e.printStackTrace();
}finally{//关闭资源
if(null != server){
try {
server.close();
} catch (IOException e) {
}
}
if(null!=client){
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
restart.onRestart();//服务关闭,关闭开关
}
}
}
/**
根据开关来判断是否要重启服务
/
class RstartExcuter extends Thread {
/* 重启开关 */
final RestartSwitch restart;
/**@param restart服务开关*/
public RstartExcuter(RestartSwitch restart) {
this.restart = restart;
}
@Override
public void run() {
while (true) {
if (restart.isRestart()) {
new ServerDemo(restart).start();
}
}
}
}
有问题,发邮件zkf53064@163.com
这个还有些问题,不好意思中我再研究下给你
直接编写一个shell脚本来监视好了。
给出来看看么?
问题是,可以重启,但服务重启次数据不对
还有这个程序是在服务器端临听的确良
不知道lz能不能改那个服务程序的代码,