Java当服务器状态布尔值为false时,如何执行批处理文件?

时间:2013-02-14 16:35:17

标签: java batch-file status

目标:我想创建一个包含布尔值的java程序,每隔5分钟检查一下我的游戏服务器(cloudnine1999.no-ip.org:port 43594)

目的:重启我的游戏服务器(如果它崩溃)

问题:不确定如何使用java检查服务器是否在线。

程序功能:如果布尔值返回false(表示服务器处于脱机状态),我希望java程序打开一个特定的批处理文件,以便服务器启动(如果服务器崩溃)

我尝试在谷歌上找到一些东西,但我没有找到任何有用的东西,而且我不够高级的编码器来自己解决这个问题,我只需要有人指导我/指出我在右边使用java编写服务器状态检查器的方向,我可以从那里完成剩下的工作。

我可能无法在美国中部和加拿大时区下午4点左右回复您的答案。

2 个答案:

答案 0 :(得分:0)

Shell脚本解决方案:

我假设服务器是Java EE服务器。服务器被Windows上的“bat”或Linux / Unix上的“shell”脚本踢掉。对于UNIX / LINUX:最简单的解决方案是在服务器启动的SHELL脚本中编写逻辑代码,以便在启动服务器时将JVM的PID记录在文件中。然后编写一个简单的shell脚本来监视使用命令“ps -aef | grep”记录的PID。如果PID不存在,请启动服务器。您应该将此脚本作为在其原始位置启动服务器的同一用户运行。第二个解决方案是“ps auxww | grep java”。请注意标识您的服务器的服务器变量。如果你运行命令,你就会知道。

Java解决方案:

每个服务器都有一个管理端口,可以使用HTTP URL进行监控。哦,你也可以点击应用程序网址。使用Java程序,您可以测试连接。如果HTTP响应代码是200 - 你很好,如果它不是200,如500/400,服务器可能会被假定为死。然后,您需要启动服务器启动脚本。

答案 1 :(得分:0)

使用Socket检查服务器是否已启动(如果它可以连接到IP和端口而不会引发异常)。小心,有些服务器不喜欢这些“空”连接。

try{
    new Socket("cloudnine1999.no-ip.org", 43594).close();
}catch(IOException ex){
    // Server probably down, restart it...
}catch(Exception ex){
    // Some  other problem, likely DNS or security related.
}

使用ProcessBuilder重新启动它。