これはまだブロックされています:
ssh Host Nohup cmd
これでも接続は開いたままになります。
ssh Host Nohup cmd &
これを試して:
ssh Host batch cmd
あなたの例の&
はsshコマンドを切り離しますが、リモートプログラムは切り離しません。
これはうまくいくようです:
ssh remote-Host'tail -f/var/log/syslog& '&
ssh remote-Host 'tail -f /var/log/syslog > /dev/null &' &
最初の&
はリモートホストのコマンドをデタッチし、2番目の&
はsshコマンド自体をデタッチします
私の例では、接続を閉じた後も、tailコマンドは実行されています。
編集接続が実際に閉じられた直後にtail
が終了するため、これは機能しないようです。
これは、STDOUT
に書き込んでいるという事実に関連している可能性があります。これにより、接続が閉じられた後に壊れたパイプが発生する可能性があります。
edit 2 tailコマンドを/ dev/null ^ _ ^にリダイレクトするときに正常に機能します
注意して、stderr/stdoutに書き込んだり、出力をローカルの宛先にリダイレクトしたりしないでください。
以下が機能します。
ssh myhost " Nohup ./r.sh & " & sleep 2 ; kill -9 $! && echo
(少なくとも、パスワードの入力を求められない場合)。あなたがそうなら、私はそれをする簡単な方法を見ていません。
この問題は明らかに長い間続いています(あなたの質問よりもさらに長いです!)。解決策は、stdoutとstderrをリダイレクトすることです。教科書の例はこれです:
ssh server 'sleep 20 & exit'
20秒間ハングします。 bashを使用すると、次のように書き換えることができます。
ssh server 'sleep 20 >/dev/null 2>&1 & exit'
これで問題が修正されます。 tcshの場合、次の行に沿って何かを使用します。
ssh server '(sleep 20 >/dev/null) >& /dev/null & exit'
参照