0

リモートサーバーで実行しようとしている実行時間の長いpythonプログラムがあります。

「sshセッションを終了した後もプロセスを実行し続けるにはどうすればよいですか?」を見てきました。、「SSH 経由でプロセスを開始して、実行を継続する方法は?」「sshを介して永続的なプロセスを実行する」、およびその他のいくつかのトピックですが、役に立たないようです。

screenscreenバックグラウンドプロセスを含む a をデタッチすることにより)およびでpythonプロセスを実行しようとしましnohupたが、どちらの場合も、sshセッションを終了すると(これが問題かどうかはわかりませんが、X11転送で実行されます、python プログラムがいくつかのグラフィックを作成しているため)、ssh セッションがハングします。

stdin,stdoutstdoutfrom/toにリダイレクトしても、ssh プロセスがハングし/dev/nullます。ssh セッションを強制終了すると、python プロセスが強制終了されます。ssh を強制終了すると、次のエラー メッセージがリモート サーバーに出力されます。g_dbus_connection_real_closed: Remote peer vanished with error: Underlying GIOStream returned 0 bytes on an async read (g-io-error-quark, 0). Exiting.

さらに、ログファイルにリダイレクトしたいので、実際にはstdoutまたはstderrにリダイレクトしたくありません。/dev/nullそのため、Python プロセスをデーモンとして実行しようとはしませんでした。(ロギングが に送信されるのが悪いのかもしれませんstdout、私は推測します...)

(1) ログアウト後もプロセスを実行し続け、(2) stdout/stderrをログ ファイルにリダイレクトするにはどうすればよいですか?

(「機能した」ことの1つは、バックグラウンドで[ハングした後] sshプロセスを一時停止してから再実行することでしたが、コンピューターをシャットダウンしたい場合はどうすればよいですか?)

4

2 に答える 2

2

X11接続は確かに問題です。Screen は stdin/stdout/stderr の接続を維持し、プログラムを HUP シグナルから保護します。ただし、グラフィックを書き込むための仮想 X サーバーは保持されません。

質問は次のとおりです。グラフィックスに何を求めていますか? プログラムが本当にそれらを出力する必要がある場合は、接続が失われた後でもアクセスし続けることができる (仮想) X サーバーをセットアップする必要があります。screen セッションに接続できるように、vnc を使用してこの仮想サーバーに接続できます。

または、プログラムをバックグラウンドでの実行に適したものにすることができます。つまり、X サーバーを使用してはなりません。その場合、いくつかのファイルを出力して、それらを見たいときに別のプログラムでグラフィックに変換したいと思うでしょう。

于 2012-11-24T08:52:13.523 に答える
0

sshd は接続用に新しいセッション リーダー bash を作成すると考えたので、プログラマーをバックグラウンドにしてstdout/ stderr( >log 2>&1 ) をリダイレクトすると、接続が失われても、実行中の bash がプログラムを制御します。

于 2012-11-24T08:49:19.397 に答える