私はリモートサーバーで作業しており、OpenFOAM計算流体力学ライブラリを使用して数値シミュレーションを実行しています。パラメトリックスタディを自動化するためにPythonスクリプトのコレクションを作成しましたが、それらはうまく機能しているようです。
SSHを使用してサーバーに接続し、インタラクティブシェルでスクリプトを起動します。それでも識別できない状況で、サーバーがSSHセッションを閉じることがあります。現在、回避策としてscreen
ウィンドウマネージャーを使用していますが、それでも問題のようです。これが私が得る出力の例です:
<lots of output before that>
Dumping up_half1 faces to "final_up_half1.obj"
Dumping cyclic match as lines between face centres to "final_up_half0up_half1_match.obj"
Writing repatched mesh to 0
End
Killing PID 32536
Connection to hpc4 closed by remote Host.
Connection to hpc4 closed.
➜ ~
シミュレーションが完了していないことに注意してください。画面にEnd
を出力するアプリケーションの終了後、別のアプリケーションを開始していくつかの処理を実行する必要があります。
だからここに質問があります:そのような切断の原因は何でしょうか?
当てずっぽう:
特にマシンに問題はありませんが、tcp接続を追跡するファイアウォールによって「保護」されたネットワークにいます。ファイアウォールは、接続が長時間アイドル状態になっていると感じると、接続が停止していると見なします。これは、ファイアウォールの観点から、それらのセグメントが属する可能性のある接続がないため、ファイアウォールがその接続に属するtcpセグメントを転送することは良い考えではないと考えていることを意味します...そしてSSHセッションは最終的にタイムアウトします。
状況を改善するために、SSHクライアントに空のセグメントを時々送信させて、ファイアウォールにリモートホスト上にアクティブなセッションがあることを通知することができます。説明されているように、ServerAliveInterval
オプションを使用してこれを行うことができます ここ 。
画面を使用している場合:以前は同じ問題が発生していましたが、ハードステータス行に時計を追加したときに誤って修正しました。これにより、画面がハードステータス行を毎分自動的に更新します。
最小限の作業について~/.screenrc
これを達成するのは次のとおりです。
hardstatus alwayslastline
hardstatus string '%=[%Y-%m-%d %c ]'
( Red Hat Magazine から採用)
Nohup
を使用すると、サーバーの切断の問題を回避できます。 Nohup
はサーバー上でコマンドを実行し、サーバーが切断されても実行を継続します。コマンドのstdoutをNohup.outというファイルに保存しますが、必要に応じてリダイレクトできます。例えば、
Nohup ./simulation > output.txt &
実行されます./simulation
そして、通常は画面に出力される出力をoutput.txtに入れます。 sshが切断されても、./simulation
は最後まで実行を続けます。