web-dev-qa-db-ja.com

バックグラウンドでリモートsshコマンドを実行するが、それでも表示する最良の方法は何ですか?

SSHコマンドをリモートで実行し、出力をローカルに表示する必要があります。ただし、接続が切断された場合でも、コマンドを実行したままにしておきます。

ログインと実行についてはあまり話していませんが、ssh user @ remotehost 'commands && command etc'を実行しています。

接続が切断された場合でもコマンドを確実に実行するにはどうすればよいですか?

15
vfclists

これを行うための最良の方法は、screenを使用することです。これにより、接続が切断された場合でもセッションを永続的に開いたままにします(そして、再び使用を開始したい場合は、screen -rを実行すると、再び開かれます。 )。

実行したいコマンドの前にscreenを前に付けると(例:ssh -t user@Host screen command)、ジョブが実行されます。

シェルのバックグラウンドで実行したい場合は、全体に&を追加することもできます。

27
Falcon Momot

あなたが再開できる永続的なセッションを探していますか、それとも単に接続解除が中止を中止するのを止めたいですか?

前者の場合はscreenを使用し、後者の場合はNohupを使用します。

11
Shane Madden

先に述べたように、screenはすべてのトリックを実行できます。しかし、必要なものだけではありません。私は長年スクリーンを使用してきましたが、システムにログインするたびにスクリーンを使用しています。 screenをインストールして、そのような構成で~/.screenrcを作成してみてください。

sessionname     vcflists
startup_message off
deflogin        off
vbell           off
msgminwait      0
msgwait         10
log             off
backtick        1 0 0 hostname
caption splitonly "%?%F%{= yk}%:%{= Kk}%? %n %t%="
hardstatus alwayslastline "%{= rY}  %1`  %{= kg} %0c %{= bY}  %-w%{= Yk} %n %t %{-}%+w %=%{g}%l "

次に、screen -Rd vcfを実行します。それがscreenの望ましい呼び出しです。以前に作成されたvcf *という名前のセッションに再接続するか(あいまいな場合は警告が表示されます)、セッションがまだ開かれていない場合は作成されます。 CTRL+A すべてを行うメタキーです。 CTRL+A CCTRL+A、その後 C)セッション内に新しいウィンドウ(画面)を作成します。 CTRL+A SPACEラウンドでフォーカスを次のウィンドウに移動します。CTRL+A D現在のセッションを切り離して、接続間ですべてのウィンドウを機能させます。 looooongタスクを起動した場合は、画面から切り離して後で再接続して、何が起きているかを確認できます。 sshセッションが失われた場合も同じことが起こります-画面は開いているすべてのウィンドウとすべてのタスクが起動された状態で生き続けます。

画面内のいくつかのウィンドウを閉じたい場合は、そのシェルからexitを実行してください。すべてのウィンドウのすべてのシェル/タスクを閉じて画面を終了する場合は、CTRL+A CTRL+\を押し、要求されたら「Y」を押すだけです。

残りすべてについては、man screenを参照してください。

7
Kondybas

私は、信頼できるsshのような「接続」に代わるこの代替案を見てきました。

http://mosh.mit.edu/

私は通常行うでしょう:

Nohup mycommand &

tail -f Nohup.out
1
gyin