2011-10-02 1 views
21

私はpythonスクリプトを実行し、終了後に再起動する必要があります。 supervisordと呼ばれるUNIXソリューションがあることはわかっています。しかし、残念ながら、私のスクリプトを実行する必要のあるサーバーはWindows上にあります。どのツールが有用であるか知っていますか? ありがとうスーパーバイザーとWindowsのアナログはありますか?

答えて

32

大きな脂肪の払い戻しhereにもかかわらず、WindowsではCygwinでスーパーバイザを実行できます。 CygwinはPosix環境をシミュレートするために長い道のりを歩んでいることが分かります。実際、スーパーバイザーは変わりません。新しいツールを習得する必要はなく、複雑なプロジェクトを複数のプラットフォームに展開する必要がある場合は、かなりの作業量を節約できます。

はここに私のレシピです:あなたはまだそれを行っていない場合は

  1. 、Cygwinをインストールします。インストールプロセス中にPythonを選択します。
  2. Cygwin端末から、通常通りvirtualenvをインストールしてください。
  3. がsupervisordためvirtualenvのを作成し、いつものようにインストールします。

    pip install supervisord 
    
  4. の設定は、通常の方法でsupervisord。スーパーバイザーはCygwinで実行されるので、Cygwinの方法でパスを使うことをお勧めします(C:\ myservers \ project1はCygwinの/ cygdrive/c/myservers/project1に変換されます)。

  5. これで、おそらくsupervisordをサービスとしてインストールしたいと考えています。ここで私はそれを行う方法は次のとおりです。

    cygrunsrv --install supervisord --path /home/Administrator/supervisor/venv/bin/python --args "/home/Administrator/supervisor/venv/bin/supervisord -n -c /home/Administrator/supervisor/supervisord.conf" 
    
  6. は、Windowsサービスマネージャに移動し、サービスを開始し、インストールしていることsupervisord。 Windowsサービスマネージャから(/停止/再起動を開始し)、それを制御することができるように

ポイント5は、Windowsサービスとしてsupervisordをインストールします。しかし、supervisorctlでできることはいつものように動作します。つまり、古い設定ファイルを単純にデプロイすることができます。

+3

注意:これは 'pip install supervisor'です。これはPython 2.4以降が必要ですが、そうではありません。任意の3以上のバージョンで動作します。 – Peon

9

Windows Serviceとしてスクリプトを実行したいと思う可能性があります。これを行うには、python-win32ライブラリが必要です。このquestionには、他の関連リソースへのリンクだけでなく、どのようにこれをやっていくのかについての良い説明があります。このquestionも使用できます。

Windows Serviceは、Windowsで連続して実行する必要のあるスクリプトをどのようにまとめたいかを指定します。起動時に自動的に起動し、障害を処理するように設定できます。誰もプロセス自体を停止させることはありませんが、その潜在的な状況に対処するには、ファイルを作成し、scコマンドを使用してサービスをポーリングして、サービスが実行中かどうかを確認します。 batファイルを60秒ごとに実行するようにスケジューリングするだけです(スクリプトが潜在的にダウンする可能性があることは妥当です)。

+0

Windowsサービスとしてpythonスクリプトを実行すると、バックグラウンドでのみ実行されます。それは十分ではありません。私の目標は、スクリプトを実行不能にすることです。誰かがそれを殺したとしても、スクリプトを再起動する必要があります。 – pss

+0

その場合、batファイル、scコマンド、およびシステムスケジューラを使用して、 'kill'プロセスを処理します。私の編集を参照してください。 –

5

あなたは、ほとんどのPOSIX OS上で動作し、supervisordのようにPythonベースされsupervisordのようなプロセス管理をしたい場合、あなたは職長(ルビー・ベース)のPythonのポートである本町になります。

http://pypi.python.org/pypi/honcho/

これは、MAC、Linux上で素晴らしい作品が、(実際には)まだ窓...

(私はそれが既に以来、破棄されたプル要求に基づいて、Windows上で働いていた楽観的に言っていた私の最初の答えを編集)

ここにWindowsのサポートを提供するフォークがありますhttps://github.com/redpie/honcho とここではWindowsをサポートするために進行中のものがありますhttps://github.com/nickstenning/honcho/issues/28 ...少なくとも近い将来可能な解決策になる可能性があります。

また、ここではWindowsをサポートするためのフォークマンフォークがあります:https://github.com/ddollar/foreman-windowsあなたのために働いているかもしれませんが、試したことはありません。

今のところ、Windowsサービスは短期間で最適なオプションです。

+3

最新のTRUNKのhonchoは今Windowsでサポートしています。使用して楽しんでください。 –

+0

こんにちは、本町についての質問:本当に監督者のような失敗したタスクを再開することになっていますか?それは私が「殺す」時ではありません。監督と本能の組み合わせを使用する必要がありますか?ありがとう。 – Ehvince

+0

実際、本尊は上司よりも監督に似ています。 https://blog.codeship.com/using-honcho-create-multi-process-docker-container/ –

関連する問題