編集する:私の考えの問題は、SSH接続がまだ開いている背景接続を作成していることです(参照:https://superuser.com/a/617670)。そのフラグを使用してsshを実行しますが、-f
javaがインストールされていることを確認する必要があります。スクリプト自体で接続を強制的に閉じる簡単な方法はありますか?
リモートコンピュータはUbuntu 14.04を実行しています。
私は次のようにJavaを呼び出すためにClojureで書かれたツールを使用していますRuntime.getRuntime().exec()
。
Runtime.getRuntime().exec("ssh", "-o", "StrictHostKeyChecking=no",
"user@host", "sudo su -");`
次に、生成されたjava.lang.Processを介して標準入力を受け取り、ファイルの内容をここに記録します。デフォルトでは.flush
作成者.close
です。すべてがうまくいきます。多くは問題なく発生しますが、最初は次のように実行されるスクリプトがあります。
if [ ! $(which java) ]; then
apt-get update -q
apt-get install -y openjdk-7-jre
fi
ノードに手動でSSHを接続すると、Javaが正常にインストールされ、プロセスが終了することがわかります。ただし、何らかの理由で、これは呼び出しコード(たとえば上記のJavaプロセス)には渡されません。
前述したように、これらはたくさんありますが、それらのどれも失敗しません。さまざまなタスクを実行するスクリプトがありますが、上記とほぼ同じタスクを実行する他のスクリプトもあります。唯一の違いは、他のソフトウェア(gitなど)をインストールして中断されないことです。
だから手動で試してみました。つまり、シェルに入り、次のように入力しました。
ssh -o StrictHostKeyChecking=no -o ubuntu@somehost sudo su -
その後、スクリプトを貼り付けると、すべてが正常です。
原因が何なのかよくわかりません。