web-dev-qa-db-ja.com

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

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

たとえば、

ssh localhost 'sleep 60 &'

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

17
Richard Hoskins

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

ssh localhost -f 'command'

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

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

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

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

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

ssh -f localhost 'sleep 60'
6
neu242

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

2
Arjan