python - supervisorctl - ¿Hay Windows analógico para supervisord?
supervisor windows (4)
Necesito ejecutar el script de Python y estar seguro de que se reiniciará después de que termine. Sé que hay una solución UNIX llamada supervisor. Pero desafortunadamente el servidor donde mi script tiene que ejecutarse está en Windows. ¿Sabes qué herramienta puede ser útil? Gracias
A pesar del gran descargo de responsabilidad here , puede ejecutar Supervisor con Cygwin en Windows; Resulta que Cygwin recorre un largo camino para simular un entorno Posix, tan bien que, de hecho, Supervord funciona sin cambios. No hay necesidad de aprender una nueva herramienta, e incluso ahorrará bastante trabajo si necesita implementar un proyecto complicado en múltiples plataformas.
Aquí está mi receta:
- Si aún no lo has hecho, instala Cygwin. Durante el proceso de instalación, seleccione Python.
- Desde la terminal de Cygwin, instale virtualenv como de costumbre.
Cree un virtualenv para supervisord, y luego instale como de costumbre:
pip install supervisord
Configure supervisord de la forma habitual. Tenga en cuenta que supervisord se ejecutará con Cygwin, por lo que es mejor que use las rutas de la forma Cygwin (C: / myservers / project1 se traduce a / cygdrive / c / myservers / project1 en Cygwin).
Ahora es probable que desee instalar Supervord como un servicio. Así es como lo hago:
cygrunsrv --install supervisord --path /home/Administrator/supervisor/venv/bin/python --args "/home/Administrator/supervisor/venv/bin/supervisord -n -c /home/Administrator/supervisor/supervisord.conf"
Vaya al administrador de servicios de Windows e inicie el supervisor de servicio que acaba de instalar.
El punto 5 instala supervisord como un servicio de Windows, para que pueda controlarlo (iniciar / detener / reiniciar) desde el administrador de servicios de Windows. Pero las cosas que puede hacer con supervisorctl
funcionan como siempre, lo que significa que simplemente puede implementar su archivo de configuración anterior.
Es probable que desee ejecutar su script como un Windows Service
. Para ello necesitarás la librería python-win32 . Esta question tiene una buena descripción de cómo haces esto, así como un montón de enlaces a otros recursos relacionados. Esta question también puede ser de utilidad.
Un Windows Service
es la forma en que desea envolver cualquier script que deba ejecutarse continuamente en Windows. Se pueden configurar para que se inicien automáticamente en el arranque y manejen las fallas. Nada detendrá a nadie de matar el proceso en sí, pero para manejar esa situación potencial, puede crear un archivo bat
y usar el comando sc
para posicionar el servicio para ver si se está ejecutando y, si no, reiniciarlo. Simplemente programe el archivo bat
para que se ejecute cada 60 segundos (o lo que sea razonable para que su script esté potencialmente inactivo).
Si desea un administrador de procesos similar a un supervisor que se ejecute en la mayoría de los sistemas operativos posix y esté basado en Python como supervisor, entonces debería mirar el honcho que es un puerto de capataz de Python (basado en Ruby):
http://pypi.python.org/pypi/honcho/
Funciona muy bien en Mac, Linux pero (en realidad) todavía no es Windows ... (editando mi respuesta inicial donde dije de manera optimista que ya estaba trabajando en Windows basado en una solicitud de extracción que se ha descartado desde entonces)
Hay una bifurcación que proporciona soporte de Windows aquí https://github.com/redpie/honcho y algunos trabajos en curso para admitir Windows aquí https://github.com/nickstenning/honcho/issues/28 ... al menos Podría convertirse en una posible solución en un futuro próximo.
También hay una bifurcación de capataz para soportar Windows aquí: https://github.com/ddollar/foreman-windows que puede estar funcionando para usted, aunque nunca lo probé.
Por ahora, un servicio de Windows podría ser su mejor opción a corto plazo.
Supervisor para Windows trabajó para nosotros en python27 - 32 bit. Tuve que instalar pypiwin32 y pywin32 == 223.