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

System.exit(1)を使用して親プロセスを強制終了しているため、その子プロセスも破棄されます。再起動するには、通常、実際の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スキルは間違いありません。

于 2010-12-26T15:55:27.923 に答える
1

JAVA_HOME のフル パスを指定してみてください (例: java の代わりに /usr/lib/jvm/java-6-sun/bin/java)。exec にはシェル環境変数がありません。

も使う

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

プロセスが終了する前に Java が終了しないようにします。


シェルで実行したい (そしてパイプや 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 に答える