1

在 ubuntu 中重新启动 java 应用程序的最佳方法是什么?我知道你可以从终端运行这样的命令,但它似乎没有工作......

        String restartArgs = "java -jar \'/home/fdqadmin/NetBeansProjects/dbConvert2/dist/dbConvert2.jar\' --Terminal=true";
        Process restart = Runtime.getRuntime().exec(restartArgs);
        System.exit(1);
4

2 回答 2

1

尝试为 JAVA_HOME 提供完整路径(例如 /usr/lib/jvm/java-6-sun/bin/java 而不是 java)。exec 没有 Shell 环境变量。

也使用

 restart.waitFor(); //wait until process finishes 

以确保 Java 在进程完成之前不会退出。


如果您确实想在 shell 中运行(并使用 shell 特定的东西,如 pipe 和 ls),请执行以下操作:

List<String> commands = new ArrayList<String>();
commands.add("/bin/sh");
commands.add("-c");
commands.add("java -jar /home/fdqadmin/NetBeansProjects/dbConvert2/dist/dbConvert2.jar");

SystemCommandExecutor commandExecutor = new SystemCommandExecutor(commands);
int result = commandExecutor.executeCommand();
commandExecutor.waitFor(); //wait until process finishes
于 2010-12-26T15:49:44.320 回答
1

您正在使用 System.exit(1) 杀死父进程,因此它的子进程也被销毁。要重新启动,您通常会提供一个 shell 脚本包装器来启动实际的 Java 应用程序。

#!/bin/sh
restartCode="1"; # predefined restart signal code
java -jar '/home/fdqadmin/NetBeansProjects/dbConvert2/dist/dbConvert2.jar' --Terminal=true; # run java program
if [ $? -eq restartCode ] # if exit code is equal to predefined restart signal code
then
  $0; # restart script
fi
exit $?;

请注意,上面的代码是一个粗略的大纲。典型的包装器在处理传递给启动脚本本身的命令行参数等方面要复杂得多。另外,我的 sh-skills 也不是绝对可靠的。

于 2010-12-26T15:55:27.923 回答