1

Providerという名前のJavaで実装されたサーバーと、それを起動するためのLinuxスクリプトがあります。

#!/bin/bash
echo "Provider"
$JAVA_HOME/bin/java -cp /tmp  Provider&
$JAVA_HOME/bin/java -version
rm  /tmp/pid
echo "$!"> /tmp/pid
echo "Provider-finish"
exit 0

別のマシン(machine2)で次のスクリプトを実行したい場合

root@machine1:/tmp# ssh  machine2/tmp/runScript.sh
Provider
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)
Provider-finish
Waiting for connection

問題は、上記のスクリプトを実行した後、コンソールを返さず、プロバイダーが起動してもハングアップすることです。

Glassfishドメインの開始のような同様の概念を分析しました。実行することによって

ssh machine2 asadmin start-domain

問題なくコンソールを返すので、実行ステータス「$?」を取得できます。

4

1 に答える 1

2

出力を書き込もうとする可能性sshdのある Java プロセスがバックグラウンドでまだ実行されているため、リモートが ssh セッションを閉じないことが問題だと思います。

バックグラウンド プロセスの stdout および stderr を「/dev/null」にリダイレクトしてみてください。例えば

$JAVA_HOME/bin/java -cp /tmp Provider > /dev/null 2>&1 &
于 2012-10-07T11:21:01.383 に答える