
私は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
他のアプリケーションを起動していくつかの処理を実行する必要があります。
だから質問はこんな感じです。このような切断の原因は何ですか?
答え1
を使用すると、サーバーの切断の問題を回避できますnohup
。 nohup
サーバーでコマンドを実行すると、サーバーが切断されても引き続き実行されます。コマンドの標準出力をnohup.outというファイルに保存しますが、必要に応じてリダイレクトできます。例えば、
nohup ./simulation > output.txt &
実行され./simulation
、通常は画面に印刷される出力をoutput.txtに入れます。 SSH接続が失われても、./simulation
完了するまで実行され続けます。
答え2
ランダム推測:
あなたのコンピュータには問題はありませんが、TCP接続を追跡するファイアウォールで「保護された」ネットワークにあります。ファイアウォールは、接続が長時間アイドル状態であることを検出すると、接続が切断されたと見なします。これは、ファイアウォールがその接続に属するTCPセグメントを渡すのが悪いと思うことを意味します。ファイアウォールの観点からは、そのセグメントはどの接続にも属さない可能性があり、SSHセッションは最終的にタイムアウトするためです。
この状況を解決するには、SSH クライアントが時々 null セグメントを送信して、リモートホストにアクティブなセッションがあることをファイアウォールに通知するようにします。ServerAliveInterval
説明されているオプションを使用してこれを実行できます。ここ。
画面を使用するとき:同じ問題が一度ありましたが、ハードステータスバーに時計を追加したときに誤って問題を解決しました。これにより、画面は1分ごとに自動的にハードステータスバーを更新します。
これを行うための最低限の努力は~/.screenrc
次のとおりです。
hardstatus alwayslastline
hardstatus string '%=[%Y-%m-%d %c ]'
(で採用レッドハットマガジン)