Y a-t-il des fenêtres analogiques à supervisord?
je dois lancer le script python et être sûr qu'il redémarrera après qu'il se termine. Je sais qu'il existe une solution UNIX appelée supervisord. Mais malheureusement serveur où mon script doit être exécuté sur Windows. Savez-vous quel outil peut être utile? Merci
4 réponses
malgré le gros disclaimer ici , vous pouvez exécuter superviseur avec Cygwin dans Windows; il s'avère que Cygwin va un long chemin pour simuler un environnement Posix, si bien qu'en fait supervisord fonctionne inchangé. Il n'est pas nécessaire d'apprendre un nouvel outil, et vous économiserez même pas mal de travail si vous avez besoin de déployer un projet compliqué à travers plusieurs plateformes.
voici ma recette:
- Si vous ne l'avez pas encore fait, installez Cygwin. Pendant le processus d'installation, sélectionnez Python.
- du terminal Cygwin, installer virtualenv comme d'habitude.
-
créer un virtualenv pour supervisord, puis installer comme d'habitude:
pip install supervisord
-
configurer supervisord de la manière habituelle. Gardez à l'esprit que supervisord sera en cours d'exécution avec Cygwin, donc vous mieux utiliser les chemins de la voie Cygwin (C:\myservers\project1 traduit en / cygdrive/c/myservers / project1 en Cygwin).
-
Maintenant, vous voulez probablement installer supervisord comme un service. Voici comment je fais:
cygrunsrv --install supervisord --path /home/Administrator/supervisor/venv/bin/python --args "/home/Administrator/supervisor/venv/bin/supervisord -n -c /home/Administrator/supervisor/supervisord.conf"
-
allez sur le gestionnaire de service Windows et démarrez le service supervisord que vous venez d'installer.
Point 5 Service Windows, de sorte que vous pouvez le contrôler (Démarrer/Arrêter/Redémarrer) à partir du gestionnaire de service Windows. Mais les choses que vous pouvez faire avec supervisorctl
fonctionnent comme d'habitude, ce qui signifie que vous pouvez simplement déployer votre ancien fichier de configuration.
vous voulez probablement exécuter votre script comme un Windows Service
. Pour ce faire, vous aurez besoin de la bibliothèque python-win32 . Cette question a une bonne description de la façon de procéder, ainsi qu'un tas de liens vers d'autres ressources connexes. Cette question peut également être utile.
A Windows Service
est la façon dont vous voulez envelopper n'importe quel script qui doit fonctionner en continu sur Windows. Ils peuvent être configuré pour démarrer automatiquement au démarrage, et gérer les échecs. Rien n'empêchera quiconque de tuer le processus lui-même, mais pour gérer cette situation potentielle, vous pouvez simplement créer un fichier bat
et utiliser la commande sc
pour perler le service pour voir s'il est en cours d'exécution et si non redémarrer le service. Il suffit de programmer le fichier bat
pour qu'il s'exécute toutes les 60 secondes (ou ce qui est raisonnable pour que votre script soit potentiellement en panne).
si vous voulez un gestionnaire de processus de type supervisord qui fonctionne sur la plupart des os posix et qui est basé sur Python comme supervisord, alors vous devriez regarder honcho qui est un port Python de foreman (basé sur Ruby):
http://pypi.python.org/pypi/honcho /
il fonctionne très bien sur mac, linux mais (en fait) pas encore windows... (éditant ma réponse initiale où j'avais dit de façon optimiste qu'il travaillait déjà sur Windows basé sur une traction requête qui a été rejetée depuis)
Il ya une fourchette qui fournit le soutien de Windows ici https://github.com/redpie/honcho et quelques travaux en cours pour prendre en charge Windows ici https://github.com/nickstenning/honcho/issues/28 ... au moins, il pourrait devenir une solution possible dans un proche avenir.
il y a aussi une fourche foreman pour supporter les fenêtres ici: https://github.com/ddollar/foreman-windows qui peut fonctionner pour vous, bien que je ne l'ai jamais essayé.
donc pour l'instant, un service Windows pourrait être votre meilleure option à court terme.
superviseur pour windows a travaillé pour nous sur python27 - 32 bit. J'ai dû installer pypiwin32 et pywin32= = 223.