pythonスクリプトを実行する必要があり、スクリプトが終了した後に再起動することを確認します。監視プログラムと呼ばれるUNIXソリューションがあることを知っています。しかし残念ながら、スクリプトを実行する必要があるサーバーはWindowsです。どのツールが役立つか知っていますか?ありがとう
大きな免責事項 here にもかかわらず、Windowsでは Cygwin を使用してスーパーバイザーを実行できます。 CygwinはPosix環境をシミュレートするのに長い道のりを歩んでいることがわかりました。新しいツールを習得する必要はなく、複雑なプロジェクトを複数のプラットフォームに展開する必要がある場合でも、かなりの作業を節約できます。
これが私のレシピです:
Supervisordのvirtualenvを作成し、通常どおりインストールします。
pip install supervisord
通常の方法でスーパーバイザを構成します。スーパーバイザはCygwinで実行されるため、Cygwinの方法でパスを使用することを覚えておいてください(C:\ myservers\project1はCygwinでは/ cygdrive/c/myservers/project1に変換されます)。
ここで、おそらく、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"
Windowsサービスマネージャに移動し、インストールしたばかりのサービススーパーバイザを起動します。
ポイント5は、監視対象をWindowsサービスとしてインストールするので、Windowsサービスマネージャーから制御(開始/停止/再起動)できます。しかし、supervisorctl
で実行できることは通常どおり機能します。つまり、古い構成ファイルをデプロイするだけで済みます。
おそらく、スクリプトをWindows Service
として実行します。そのためには python-win32 ライブラリが必要です。この question は、これをどのように行うかについての良い説明と、他の関連リソースへのたくさんのリンクがあります。この question も役立つかもしれません。
Windows Service
は、Windowsで継続的に実行する必要があるスクリプトをまとめる方法です。起動時に自動的に起動し、障害を処理するように構成できます。誰かがプロセス自体を強制終了するのを阻止するものは何もありませんが、その潜在的な状況を処理するには、bat
ファイルを作成し、sc
コマンドを使用してサービスをポーリングして、それがあるかどうかを確認します実行し、そうでない場合はサービスを再起動します。 bat
ファイルを60秒ごとに実行するようにスケジュールするだけです(または、スクリプトがダウンする可能性がある場合はそれが妥当です)。
ほとんどの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サービスが最善の短期オプションである可能性があります。
windowsのスーパーバイザー python27-32ビットで動作しました。 pypiwin32とpywin32 == 223をインストールする必要がありました。
いいえ、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()