web-dev-qa-db-ja.com

sshを介してリモートプロセスを起動し、接続を終了するにはどうすればよいですか?

これはまだブロックされています:

ssh Host Nohup cmd

これでも接続は開いたままになります。

ssh Host Nohup cmd &
3
Łukasz Lew

これを試して:

ssh Host batch cmd
1
Mox

あなたの例の&は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に書き込んだり、出力をローカルの宛先にリダイレクトしたりしないでください。

1
Romuald Brunet

以下が機能します。

ssh myhost " Nohup ./r.sh & " & sleep 2 ; kill -9 $! && echo

(少なくとも、パスワードの入力を求められない場合)。あなたがそうなら、私はそれをする簡単な方法を見ていません。

0
skeept

この問題は明らかに長い間続いています(あなたの質問よりもさらに長いです!)。解決策は、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'

参照

0
Paul