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


14

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

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

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

回答:


26

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

実行したいコマンドscreen(例:)を接頭辞として付けると、うまくいきますssh -t user@host screen command

シェルのバックグラウンドで実行する場合は&、すべてを追加することもできます。


コマンドを実行する端末を割り当てるには、おそらくssh -tを使用する必要があります。それ以外の場合、エラーは「端末に接続する必要があります」です。
盆栽バイキング

11

再開できる永続的なセッションを探していますか、それとも単に切断が実行を強制終了するのを止めたいですか?

前者の場合、を使用screenし、後者の場合、を使用しますnohup


7

前述のように、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画面を参照してください。



1

私は通常やるだろう:

nohup mycommand &

tail -f nohup.out
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.