web-dev-qa-db-ja.com

切断後にシェルを回復する方法

リモートのCentOS 5.6マシンでいくつかの作業を行っているのですが、ネットワークがドロップし続けます。再接続後にハングしたセッションを回復する方法はありますか?

編集:yumを使用していくつかの更新とインストールを行っていますが、プロセスが何をしている最中でもプロセスがハングし続ける場合、これが問題になるのではないかと心配しています。

44
sergio

方法はありませんが、これを防ぐためにtmuxを使用するのが好きです。私はtmuxを起動し、操作を開始して、途中に行きます。戻って接続が切断されたことがわかった場合は、再接続してtmux attachと入力するだけです。

ここに例があります。

$ tmux
$ make <something big>
......
Connection fails for some reason
Reconect

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0
Back in the tmux sesion
69
cnicutar

Tmuxとscreenの推奨事項はどちらも良い提案です。それらはあなたの質問への答えを意味しますが、実際にはそれを述べません。質問への答えは、方法はありません。 ssh経由でログインした場合、接続が切断されるとシェルは終了します。回避策は、ログインしてすぐにある種の仮想端末(tmuxなど)を起動することです。接続が切断されると、現在のシェルは終了しますが、新しいシェルを開いて仮想ターミナル(実際に作業を行っているシェルを実行している)に再接続できます。

37
William Pursell

ウィリアムが言ったように、短い答えはノーです、方法はありません。これを防ぐには、接続を失う前に screenコマンド を使用できます

8
Nicholas Smith

誰かが回答ではなくコメントにreptyrを追加したので、それを賛成することはできませんが、編集された質問に対する良い回答のようで、CentOSでうまく機能しました。

参照してください: https://github.com/nelhage/reptyrhttps://www.ostechnix.com/reptyr-move-running-process-new-terminal/

再接続後にハングしたセッションを回復する方法はありますか?

編集:yumを使用していくつかの更新とインストールを行っていますが、プロセスが何をしている最中でもプロセスがハングし続ける場合、これが問題になるのではないかと心配しています。

同じことで、yum更新セッションへのリモート接続が失われました。だから私はこの質問を検索して見つけました...そして今度は再接続して画面を使用しました:

  1. sSHに再接続します
  2. 画面
  3. 上記のリンクに従ってreptyrをインストールします
  4. ps -a | grep yum
  5. reptyrpsid

そして、私はyumが数時間前に与えていた回復したプロンプトにいます。

技術的には答えはすべて正しいです。これはハングしたセッションの回復ではなく、孤立したプロセスを現在のセッションに再親化することです。そして、それも非常に便利です...

3
ingleno

いいえ、切断後にシェルを回復することはできません。代わりに、実行できることは、実行していたコマンドが切断後も引き続き実行されるようにすることです。

これを行うには、「Nohup」および「disown」コマンドを使用します。これらは通常、ほとんどのシェルに組み込まれているコマンドです。つまり、何もインストールする必要はありません。ただし、これは非インタラクティブコマンドに対してのみ機能します。

したがって、手順は次のようになります。

  1. サーバーにログイン
  2. コマンドを実行します: "Nohup Sudo yum update&"(これにより、すべての出力が現在のディレクトリのNohup.outファイルに記録されます)
  3. 「disown%1」を実行します
  4. この時点で自由に切断するか、切断されるのを待ちます:)

サーバーに戻ったら、「tail Nohup.out」を実行して、コマンドの動作を確認します。

3
zygis

多くの人々がscreentmuxを提案しているように、どちらも基本的な機能をサポートしていますが、明確な特定の機能を持っているため、すべての場合において、どちらが優れているとは言えません。たとえば、tmuxのみがWindow-splittingをサポートしますが、GNU画面のみが切り替え可能です長い行の折り返しと(Ctrl + ar)詳細な比較を見る こちら

また、sshのこの問題を修正するためのツールも存在します。

Autossh は、sshのコピーを開始して監視するプログラムであり、トラフィックの通過が停止または停止した場合に必要に応じて再起動します。アイデアはrstunnelからです。

Mosh は、ローミングを可能にし、断続的な接続をサポートし、ユーザーのキーストロークのインテリジェントなローカルエコーと行編集を提供するリモートターミナルアプリケーションです。 MoshはSSHの代替品です。特にWi-Fi、携帯電話、長距離リンクを介して、より堅牢で応答性が高くなります。

1