2009-05-21 25 views
3

私は、GNU Screenを使用して起動する必要のある2つのサーバプログラムを持っています。私は、各スクリーンセッションを開始してサーバープロセスを監視するPythonベースのプログラムを使用して、これらのサーバーをクラッシュから強くしたいと考えています。サーバープロセスがクラッシュした場合は、無関係なスクリーンセッションを終了し、画面を再表示してサーバーを再起動するために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 
} 
+0

これらの実際のスレッドはありますか?それとも子プロセスですか? –

+0

Pythonスクリプト(私は思う)は、独立した2つのプログラムの再起動を処理するためにマルチスレッド化する必要があります。したがって、それらは独立して子プロセスを開始するスレッドです。 – Caedis

答えて

5

がなぜ見ないでください

「する必要がある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) 
+1

うわー、私はそれから集めることができる情報のすべてのドロップのためにそのコードを解剖する次の時間を過ごすでしょう。ありがとうございました! – Caedis

3

あなたが本当に画面に制作ソフトウェアを実行しないでください。サーバーが再起動した場合、どのように起動しますか?手動で? また、あなたは車輪を再発明しようとしていると思います。あなたが必要とすることをするかなり良いツールがすでにあります。

launchtoolは リソースの使用を制限し、 ユーザーおよびグループのアクセス権を変更し、あなたがそのログ出力を、 信号を遮断し、その環境を制御するなど など、多くの点でその 実行を監督する ユーザー提供のコマンドを実行できます が失敗した場合は再起動し、それを継続的に実行し、 をデーモンに変換します。

Monit、 プロセス、ファイル、ディレクトリ、およびUNIXシステム上の ファイルシステムの管理と監視のための無料のオープンソース ユーティリティです。 Monit は自動保守を行い、 修理を行い、エラーのある状況では意味のある 因果関係を実行することができます。

+0

クライアントはサーバーを使用していますが、それはミッションクリティカルではなく、ビジネス以外の目的で使用するためのテストサーバーです。彼らが死んでも、それを維持することは重要ですが、サーバプログラムは誰でも殺すことはありません。この演習の主な目的は、私が将来Pythonを学びながら拡張することができる有用なプログラムを作成することです。私は満足する必要があるときに私が最もよく学ぶことが分かった。これを行うアプリがあるかもしれませんが、目的を破るものです。 – Caedis

関連する問題