java监控程序

difficult 2009-08-17 11:11:01
在linux平台上想运行一java监控程序时刻监控一应用,如不响应就重启动此应用程序?此java程序如何写,如何运行?如何关闭应用并重新启动?
...全文
1228 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
likerene 2011-07-24
  • 打赏
  • 举报
回复
都是高人啊。膜拜下
leisore 2010-07-07
  • 打赏
  • 举报
回复
可以参照tomcat等应用程序的的做法
当点击startup.bat时,tomcat启动
当点击shutdown.bat时,tomcat关闭

具体实现是:
startup的程序开启了一ServerSocket,并开始监听某一端口
shutdown的程序新建一Socket,发送shutdown命令,startup程序接收到时
自己安全终止。
如果shutdown不可以正常发送消息,则可以认为startup程序已经死掉
就可以后续处理了
码YouMe 2010-07-07
  • 打赏
  • 举报
回复
路过,学习了
difficult 2009-08-18
  • 打赏
  • 举报
回复
up
lovecj6185 2009-08-17
  • 打赏
  • 举报
回复
唉,真晕,还是这样难看。真抱歉
最后一次贴个容易读的


public class Test1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Watcher w = new Watcher();
w.setDaemon(true); //设置监控程序为后台程序
w.start(); //启动监控器
w.setStatus(false); //停止监控
}

}

class Watcher extends Thread{ //监控类

boolean status = true;
Worker w = new Worker();

void setStatus(boolean status){ //设置监控器的运行状态
this.status = status;
}

public void run(){
w.start(); //启动被监控程序

while(status){
if(!w.isAlive()){ //测试被监控程序是否还在运行
restart(); //重新启动应用
}
try {
w.sleep(1000); //间隔1秒查看被监控应用的状态
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

stop(false); //监控器退出之前,关闭被监控的程序
}

void stop(boolean status){ //停止被监控程序的方法
w.setStatus(false);
}

void restart(){ //重新启动被监控程序
w = new Worker();
w.start();
}
}

class Worker extends Thread{ //被监控的应用类

boolean status = true;
void setStatus(boolean status){ //设置运行状态
this.status = status;
}

public void run(){
while(status){
//some codes
}

}
}

lovecj6185 2009-08-17
  • 打赏
  • 举报
回复
不好意思,忘了格式,重新发

public class Test1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Watcher w = new Watcher();
w.setDaemon(true);
w.start();
w.setStatus(false);
}

}

class Watcher extends Thread{ //监控类

boolean status = true;
Worker w = new Worker();

void setStatus(boolean status){ //设置监控器的运行状态
this.status = status;
}

public void run(){
w.start(); //启动被监控程序

while(status){
if(!w.isAlive()){ //测试被监控程序是否还在运行
restart(); //重新启动应用
}
try {
w.sleep(1000); //间隔1秒查看被监控应用的状态
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

stop(false); //监控器退出之前,关闭被监控的程序
}

void stop(boolean status){ //停止被监控程序的方法
w.setStatus(false);
}

void restart(){ //重新启动被监控程序
w = new Worker();
w.start();
}
}

class Worker extends Thread{ //被监控的应用类

boolean status = true;
void setStatus(boolean status){ //设置运行状态
this.status = status;
}

public void run(){
while(status){
//some codes
}

}
}
lovecj6185 2009-08-17
  • 打赏
  • 举报
回复
public class Test1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Watcher w = new Watcher();
w.setDaemon(true);
w.start();
w.setStatus(false);
}

}

class Watcher extends Thread{ //监控类

boolean status = true;
Worker w = new Worker();

void setStatus(boolean status){ //设置监控器的运行状态
this.status = status;
}

public void run(){
w.start(); //启动被监控程序

while(status){
if(!w.isAlive()){ //测试被监控程序是否还在运行
restart(); //重新启动应用
}
try {
w.sleep(1000); //间隔1秒查看被监控应用的状态
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

stop(false); //监控器退出之前,关闭被监控的程序
}

void stop(boolean status){ //停止被监控程序的方法
w.setStatus(false);
}

void restart(){ //重新启动被监控程序
w = new Worker();
w.start();
}
}

class Worker extends Thread{ //被监控的应用类

boolean status = true;
void setStatus(boolean status){ //设置运行状态
this.status = status;
}

public void run(){
while(status){
//some codes
}

}
}
zhangyong20081204 2009-08-17
  • 打赏
  • 举报
回复
学习啦。。真是高手
lovecj6185 2009-08-17
  • 打赏
  • 举报
回复
恩,楼上的这是windows版的吧
其实楼主说的linux版应该思路是一致的
只不过把命令换成linux的就可以了
lookhang 2009-08-17
  • 打赏
  • 举报
回复
这个我有做过,我用的BAT文件,检查任务管理器里的程序是否存在,不存在则启动!
至于调用这个BAT可以用windows的计划任务,也可以用楼主说的java,如果担心jvm挂了还是用计划任务吧!
BAT我贴出来~~


@echo off & mode con cols=80 lines=100 &color 0a
PATH=D:\jdk1.6.0\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem

echo 正在检查服务...

tasklist|find "sp_yinyuan_sp.exe"&& echo %time% 《姻缘SP端》正常...|| start D:\AllService\YinYuan\SP\sp_yinyuan_sp.exe&& echo %time% 启动《姻缘SP端》完成...

tasklist|find "Yinyuan_Animal.exe"&& echo %time% 《生肖姻缘》正常...|| start D:\AllService\YinYuan\Animal\Yinyuan_Animal.exe&& echo %time% 启动《生肖姻缘》完成...

tasklist|find "Yinyuan_Bloodtype.exe"&& echo %time% 《血型姻缘》正常...|| start D:\AllService\YinYuan\BloodType\Yinyuan_Bloodtype.exe&& echo %time% 启动《血型姻缘》完成...

tasklist|find "Yinyuan_Constellation.exe"&& echo %time% 《星座姻缘》正常...|| start D:\AllService\YinYuan\Constellation\Yinyuan_Constellation.exe&& echo %time% 启动《星座姻缘》完成...

tasklist|find "TextMMS.exe"&& echo %time% 《动漫短信》正常...|| start D:\Java\Tomcat5.5\webapps\C\TextMMS.exe&& echo %time% 启动《动漫短信》完成...

tasklist|find "VerseSms_mobile.exe"&& echo %time% 《诗歌短信SP端》正常...|| start D:\AllService\VerseSMS\VerseSms_mobile.exe&& echo %time% 启动《诗歌短信SP端》完成...

tasklist|find "VerseSms.exe"&& echo %time% 《诗歌短信》正常...|| start D:\AllService\VerseSMS\VerseSms.exe&& echo %time% 启动《诗歌短信》完成...

tasklist|find "SPskintest.exe"&& echo %time% 《皮肤测试》正常...|| start D:\AllService\SkinTest\SPskintest.exe&& echo %time% 启动《皮肤测试》完成...

tasklist|find "IWITSMS.exe"&& echo %time% 《短信故事类》正常...|| start D:\AllService\IwitSMS\IWITSMS.exe&& echo %time% 启动《短信故事类》完成...

tasklist|find "AutoTimeCheck.exe"&& echo %time% 《网络对时》正常...|| start D:\AllService\AutoTimeCheck\AutoTimeCheck.exe&& echo %time% 启动《网络对时》完成...

tasklist|find "PhoneBookBackup.exe"&& echo %time% 《通讯录备份》正常...|| start D:\Java\Tomcat5.5\webapps\TelBack\PhoneBookBackup.exe&& echo %time% 启动《通讯录备份》完成...

tasklist|find "SMSGame.exe"&& echo %time% 《短信Game类》正常...|| start D:\AllService\SMSGame\SMSGame.exe&& echo %time% 启动《短信Game类》完成...

tasklist|find "GameServer.exe"&& echo %time% 《GameServer》正常...|| start D:\AllService\GameService\GameServer.exe&& echo %time% 启动《GameServer》完成...

tasklist|find "TVService.exe"&& echo %time% 《TVService》正常...|| start D:\AllService\TVService\TVService.exe&& echo %time% 启动《TVService》完成...

tasklist|find "SocketServer.exe"&& echo %time% 《动态菜单》正常...|| start D:\AllService\Dynmenu\SocketServer.exe&& echo %time% 启动《动态菜单》完成...
islandrabbit 2009-08-17
  • 打赏
  • 举报
回复
学习+支持+帮顶+...
lovecj6185 2009-08-17
  • 打赏
  • 举报
回复
那么在java中如何判断某java进程是否存在?又如何得到此进程的pid?

java进程可能宕掉
你说的这个宕掉,应该理解为jvm都退出了吧
既然jvm都退出了,怎莫还能用java程序去做监视呢

况且,你说的pid是linux特有的吧,并不是java特有的
所以,如果要实现你说的查找pid之类的,偶认为只有用shell去实现
difficult 2009-08-17
  • 打赏
  • 举报
回复
to lovecj6185:
非常感谢你,如此热心。不过有个问题,我监控的是一另一java进程,此java进程可能宕掉不存在,可能只是不响应了。因此必须先根据某种方法判断此java进程是否存在,如果存在则得到其进程pid,并kill此进程。
那么在java中如何判断某java进程是否存在?又如何得到此进程的pid?

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧