sshを使用してリモートUnixマシンでコマンドを実行し、コマンドが完了する前に終了するにはどうすればよいですか?


17

Unixマシンでsshを使用してコマンドを実行し、コマンドが完了する前に終了するにはどうすればよいですか?

たとえば、次のように入力した場合

ssh localhost 'sleep 60 &'

スリープがバックグラウンドで実行されていても、スリープが完了するまでsshが端末でハングします。


おそらく&引用符の外側が必要でしょう。
ブラッドギルバート

1
いいえ、それは単にキット全体とkaboodleをバックグラウンドに置くだけで、パスワードを入力することはできません。
リチャードホスキンズ

回答:


19

SSHには-fスイッチがあり、これはクライアントでnohupを使用するのとまったく同じですが、sshがパスワードを要求することを可能にします。次のように使用します。

ssh localhost -f 'command'

ただし、 SSHは引き続きバックグラウンドで実行されるため、サーバー上のコマンドが完了する前にクライアントをシャットダウンすると、SSHは中止されます。コマンドの実行後にssh接続を閉じたい場合は、サーバー側で画面を使用できます。

ssh localhost -f 'screen -d -m sleep 60'

'ssh remotemachine -n​​' long running command> withremoteredirects 2>&1 </ dev / null& 'を実行し、クライアントがシャットダウンするとコマンドは完了しますか?
リチャードホスキンズ

知らない ssh接続が失われた場合、sshデーモンはsshの「内部」のすべての端末を終了する必要があります。Ansは、親プロセスが終了したため、端末がコマンドを開始してから終了します。しかし、試してみる価値はあります;)
マーティン

サーバー側の「画面」ではなく「nohup」はどうですか?
リチャード

@ブラッド・ギルバート いくつかのことを考えることができますが、共通していないことの1つは、「スクリーン」がすべてのPOSIXマシンで利用できるわけではないということです。
リチャード


6

nohup、stdout / stderrリダイレクトを使用し、バックグラウンドでコマンドを実行します。

 nohup ssh localhost 'sleep 60' >/dev/null 2>/dev/null &

編集:またはさらに良いことに、sshの-fパラメーターを使用するだけです:

ssh -f localhost 'sleep 60'

おそらく、2つのリダイレクトをで結合でき&>/dev/nullます。
ブラッドギルバート

@BradGilbertその構文はPOSIX互換ではありません。いくつかの文字を節約するために互換性を犠牲にすることについて議論するのは困難です。
トリプリー

2

またはを使用してログインした後、後で戻って進捗状況や出力を確認sshするscreen場合は開始します。


個人的に設定が簡単だと思う「tmux」を使用することもできます。両方のアプリケーションは、それぞれが長所と短所を持っているとほぼ同等です。
mzuther
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.