0

2 つの方法でリモート スクリプトを実行できます。1回目(間接) #ssh 2回目(ssh接続後) #ssh # #exit (ホスト端末に戻る)

チャネル転送の種類に多少の違いがあると思います。つまり、リモートスクリプトを実行するために最初の方法を使用した場合、スクリプトの出力は、ホストマシンではなく、2番目の方法のようなリモートのものである必要があります。

uturksat1 と uturksat2 の 2 台のマシンがあります。uturksat2 には、Linux スクリプト (/tmp/runScript.sh) と Java クラス プロバイダーがあります。Linux スクリプトは、ソケットを開いてリッスンする Provider Java アプリケーションを実行します。

#!/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

uturksat1 マシンでは、次のコマンドを入力します

root@UTURKSAT1:/tmp# ssh  uturksat2 /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

コマンド プロンプトが自動的に返されないため、戻るには ctrl+c を押す必要があります

次のコマンドを入力したら:

root@UTURKSAT1:/tmp# ssh -t  uturksat2 /tmp/runScript.sh
Provider
Waiting for connection
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
Connection to uturksat2 closed.
root@UTURKSAT1:/tmp#

プロバイダー アプリが実行されていません。プロバイダーがリッスンしているポート 2004 への telnet 経由でテストできます。

telnet  uturksat2 2004

最後の問題は、プロバイダーが log4j を使用して内部ログを保持することです。リモート Linux スクリプト実行の最初の方法では、log4j lof ファイルは作成されませんが、2 番目の方法では作成されます。

4

2 に答える 2

2

これら2つのコマンドの唯一の違いは次のとおりです。

ssh second
script
exit

ssh second script

2番目のケースでは、スクリプトはターミナルなしで開始されます。2番目のケースでターミナルを強制するには、以下を指定する必要があります-t

ssh -t second script

Update.1

scriptバックグラウンドで開始してsshセッションを終了する場合:

ssh second 'nohup script < /dev/null > nohup.out 2>&1 &'
于 2012-10-05T08:00:08.353 に答える
0

異なる説明で同じ質問を開きました。解決しました。私のモチベーションを高く保つあなたのアドバイスに感謝します。あなたがすでに知っているように、これが解決策です。 LinuxスクリプトでリモートJavaサーバーを実行する

于 2012-10-07T21:38:38.700 に答える