SSH パイプが壊れてフォアグラウンド プロセスが停止する

SSH パイプが壊れてフォアグラウンド プロセスが停止する

SSH 経由で接続できるホストが 2 つあります。 1 つのホストでは、しばらくするとエラーが発生しますが、Write Failed: broken pipe.もう 1 つのホストではこのエラーは発生しません。

あるホストではこの問題が発生するのに、別のホストではすべて正常である理由がわかりません。

そこで、tmux を使用して SSH 接続を設定し、リモート ホスト内でフォアグラウンド プロセス (celeryd) を実行しました。しかし、SSH セッションが失敗し、ドロップされたセッションに再接続しても、フォアグラウンド プロセスは終了しています。

SSH 接続が切断されたときにフォアグラウンド プロセスが停止しないようにしたいのですが、解決策は 2 つあります。

  1. SSHの壊れたパイプを回避する方法を知っているか、
  2. SSH 接続が切断されたときにプロセスが終了しないようにする方法を知っています。

誰かこれについて助けてくれませんか?

答え1

SSH接続で何が起きているのか分かりませんが、おそらくネットワークリンクが不良なのでしょうか?モッシュこれは通常の SSH 接続よりも堅牢です。特にネットワークに問題がある場合。

接続を修正できない場合は、nohupコマンドの前に を使用するか、または を試してnohup tmux、何かが変化するかどうかを確認してください。

nohup - ハングアップの影響を受けないコマンドを実行し、出力は非 tty に出力します。

概要
nohup コマンド [ARG]...
nohup オプション

答え2

私はこの問題に数回遭遇したことがあります。私の場合、パイプが壊れた原因はルートの欠落でした。メイン ネットワーク上の物理マシンから Nat の背後にある別のネットワーク上の VM に接続した場合にのみ発生しました。

ネットワークの問題をチェックして、壊れたパイプの発生を防ぐことができるかどうかを確認します。

問題の原因が見つからない場合は、screen や tmux などを使用して、切断されていてもターミナルを開いたままにすることができます。その後、screen または tmux セッションに再接続して接続すると、プロセスは引き続き実行され、アクティブになります。

答え3

私の場合、SSH 切断の最も一般的な原因は、キープアライブがないことです。これは SSH クライアントで設定できます。SSH の場合は、「-oTCPKeepAlives=yes」になります。

SSH が閉じた後に実行されるプログラムに関しては、シェルでプログラムを実行すると、それはシェル インスタンスの子プロセスになります。シェルが閉じると、子も閉じます。最後に & を付けてプログラムを実行すると、別のプロセスが生成されます。簡単なテストを実行したところ、SSH 接続が切断された後もプロセスは継続しているようです。

関連情報