我一直试图在一夜之间运行我的java程序,但我需要重新启动它,以保存它的进度并完全重启机器。几个小时后,我让程序保存进度并执行一些重启文件来重启程序。
void restartServer() {
try {
Runtime rt = Runtime.getRuntime();
rt.exec("./restart.bat");
} catch (java.io.IOException err) {
logError(err.getMessage());
}
}
在restart.bat里面我有:
echo Restarting Server
killall -9 java
sleep 2;
nohup java -Xmx200m -classpath bin server.Main;
然而它不起作用。它说:
[root@linode java]# ./restart.bat
Restarting Server
: no process killed
: command not found 3:
nohup: appending output to `nohup.out'
: command not found 4:
[root@linode java]#
为什么说java进程在运行时没有进程被杀死?为什么说命令没找到?它永远不会重启程序。
答案 0 :(得分:1)
如何将#!/bin/sh
或类似内容放在restart.bat
的第一行
BTW,.bat
是linux系统扩展的一个非常糟糕的选择。
答案 1 :(得分:1)
你的JVM像中间进程一样被杀死是否安全?如果没有,您可以考虑使用JMX bean来检查程序状态并从JVM内部执行关闭。
答案 2 :(得分:1)
不是从服务器本身启动应用程序,而是可以执行如下脚本:
#!/bin/sh
while [ 1 ]
do
nohup java -Xmx200m -classpath bin server.Main;
done
这将在退出后重新启动该过程。在您的savestate退出后,它将自动重启。