3

GNUScreenを使用して起動する必要がある2つのサーバープログラムがあります。各画面セッションを開始してサーバープロセスを監視するPythonベースのプログラムを使用して、これらのサーバーをクラッシュから保護したいと思います。サーバープロセスがクラッシュした場合、余分な画面セッションを強制終了し、画面を使用してサーバーを再起動するためのPythonコードが必要です。

私はPythonを初めて使用しますが、この機会を利用して自分自身を教えています。これはbashスクリプトで実行できることを私は知っています。しかし、将来の機能のためにこのコードを構築したいので、Pythonだけである必要があります。

擬似コードは次のとおりです。

thread-one {
     While 1:
     start server 1 using screen
     wait for server to end
     end while
}

thread-two {
     While 1:
     start server 2 using screen
     wait for server to end
     end while
}
4

2 に答える 2

6

「2つの別々のプログラムの再起動を処理するためにマルチスレッド化する必要があります」

理由がわかりません。

import subprocess

commands = [ ["p1"], ["p2"] ]
programs = [ subprocess.Popen(c) for c in commands ]
while True:
    for i in range(len(programs)):
        if programs[i].returncode is None:
            continue # still running
        else:
            # restart this one
            programs[i]= subprocess.Popen(commands[i])
        time.sleep(1.0)
于 2009-05-21T19:37:16.130 に答える
3

画面上で本番ソフトウェアを実行するべきではありません。サーバーが再起動した場合、どのように起動しますか?手動で?また、あなたは車輪の再発明を試みていると思います。あなたが必要とすることをするかなり良いツールがすでにあります。

launchtoolを使用すると、環境の制御、シグナルのブロック、出力のログ記録、ユーザーとグループのアクセス許可の変更、リソース使用量の制限、失敗した場合の再起動、継続的な実行、ターンなど、さまざまな方法で実行を監視するユーザー指定のコマンドを実行できます。デーモンなどに追加します。

Monitは、UNIXシステム上のプロセス、ファイル、ディレクトリ、およびファイルシステムを管理および監視するための無料のオープンソースユーティリティです。Monitは自動メンテナンスと修復を実行し、エラー状況で意味のある原因となるアクションを実行できます。

于 2009-05-21T19:23:00.090 に答える