web-dev-qa-db-ja.com

監視対象のWindowsアナログはありますか?

pythonスクリプトを実行する必要があり、スクリプトが終了した後に再起動することを確認します。監視プログラムと呼ばれるUNIXソリューションがあることを知っています。しかし残念ながら、スクリプトを実行する必要があるサーバーはWindowsです。どのツールが役立つか知っていますか?ありがとう

27
pss

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

これが私のレシピです:

  1. まだ実行していない場合は、Cygwinをインストールします。インストールプロセス中に、Pythonを選択します。
  2. Cygwinターミナルから、通常どおり virtualenv をインストールします。
  3. Supervisordのvirtualenvを作成し、通常どおりインストールします。

    pip install supervisord
    
  4. 通常の方法でスーパーバイザを構成します。スーパーバイザは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サービスマネージャに移動し、インストールしたばかりのサービススーパーバイザを起動します。

ポイント5は、監視対象をWindowsサービスとしてインストールするので、Windowsサービスマネージャーから制御(開始/停止/再起動)できます。しかし、supervisorctlで実行できることは通常どおり機能します。つまり、古い構成ファイルをデプロイするだけで済みます。

39
dsign

おそらく、スクリプトをWindows Serviceとして実行します。そのためには python-win32 ライブラリが必要です。この question は、これをどのように行うかについての良い説明と、他の関連リソースへのたくさんのリンクがあります。この question も役立つかもしれません。

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

9
Mark Gemmill

ほとんどのposix OSで実行され、監視対象のようなPythonベースの監視対象のプロセスマネージャーが必要な場合は、Python foreman(Rubyベース)のポート)であるhonchoを確認する必要があります。 :

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

Mac、Linuxでは動作しますが、(実際には)まだWindowsでは動作しません...(楽観的に言った私の最初の回答を編集して、それ以降は破棄されたプルリクエストに基づいてWindowsですでに動作していた)

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

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

したがって、現時点では、Windowsサービスが最善の短期オプションである可能性があります。

5

windowsのスーパーバイザー python27-32ビットで動作しました。 pypiwin32とpywin32 == 223をインストールする必要がありました。

2
Channa

いいえ、supervisordはWindowsではサポートされていません。

[〜#〜] but [〜#〜]できることは、ラッパースクリプトから自動的に再起動することです。

#!/usr/bin/python
from subprocess import Popen

file_path = " script_to_be_restarted.py"
args_as_str = " --arg1=woop --arg2=woop"

while True:
    print("(Re-)Start script %s %s" % (file_path, args_as_str))
    p = Popen("python " + file_path + args_as_str, Shell=True)
    p.wait()
0
gies0r