2012-04-21 7 views
0

こんにちは私は1つのIPアドレスにSSHと私はこのようSSH -ingと

ssh $LINE java -Djava.library.path=/N/u/sbpatil/ds/Project4/demons/Project4Lib -cp "/N/u/sbpatil/ds/Project4/demons:/N/u/sbpatil/ds/Project4/demons/Project4Lib/jug-uuid.jar:/N/u/sbpatil/ds/Project4/demons/Project4Lib/NaradaBrokering.jar:/N/u/sbpatil/ds/Project4/demons/Project4Lib/sigar.jar" PublisherClient >> output2 & 

が、OUTPUT2ファイルは一切出力を持っていないことでそれを行うシェルスクリプト を通じて私のJavaコードを実行するために必要なJavaプログラムをコンパイルします。 javaのrunコマンドが私にエラーを与えても、そのエラーはそのファイルに書き込まれますが、書き込まれていません。 誰でもこのスクリプトを書くべきですか教えていただけますか?

+0

すべての行を1行にするのではなく、まずリモートマシンにssh-loginしてからjavaコマンドを起動できますか?コマンドのどの部分がどのマシンで起こるかは明らかです。 '' 'がリモートマシン上で実行されているのかあなたの上で実行されているのかわかりません... – cello

+1

最終ファイルの前に2&&1のようなことをしない限り、エラーは出力ファイルに書き込まれません。それ以外の場合、output2には標準出力のみが含まれます。 – Richante

+0

コマンドは、すべてのノードにアクセス可能なファイルを作成します>>ので、実際にファイルが共有ファイル・システム..です –

答えて

2

これで、バックグラウンドでsshを実行して、出力をローカルファイルにリダイレクトするように見えました。 「」にコマンドラインを囲み:あなたがそのようなあなたのアプリを起動した場合ssh $LINE 'java ... 1>>output2 2>&1 &'

nohupを使用することは良い考えかもしれません。

+0

2>&1&感謝の意味を教えてください! –

+0

2>&1はSTDERR(JavaではSystem.err、デフォルトではスタックトレースが印刷されます)をSTDOUT(通常は印刷するSystem.out)にリダイレクトします。したがって、 '2>&1'を実行することで、同じファイル内のすべての出力を取得できます。もちろん、別のファイルに書き込むこともできますが、一般にバックグラウンドプロセスを起動するときは、両方をリダイレクトすることをお勧めします。 –