Tornado Python como demonio

Tengo mi código escrito con tornado y quiero que funcione como Apache o Nginx, es decir

  1. Debe seguir escuchando el puerto incluso cuando cierro el shell.
  2. Debe iniciarse automáticamente al reiniciar el sistema.

He intentado el comando nohup para que funcione incluso cuando cierro el shell. Funciona. Pero me pregunto si hay una opción de limpieza disponible para el mismo.

Tomado de la documentación oficial aquí .

Visión general

La mayoría de las aplicaciones de Tornado se ejecutan como procesos individuales. Para la producción, esto generalmente significa una combinación bastante sencilla de administración de procesos externos y proxy. Aquí hay algunas mejores prácticas / recursos reunidos.

Desarrollo

Cuando el modo de depuración está habilitado, las plantillas no se almacenan en caché y la aplicación se reiniciará automáticamente durante el desarrollo. Esto fallará si se produce un error de syntax de Python, sin embargo. (Esto se puede solucionar con un código adicional o usando Supervisor en desarrollo)

Es posible que desee ejecutar su aplicación desde un multiplexor de terminal como pantalla o tmux para obtener más flexibilidad para dejar las cosas en funcionamiento y rastrear errores fatales.

Instrumentación

Producción

Normalmente, en producción, se ejecutan múltiples procesos de aplicación de tornado (al menos uno por núcleo) con un proxy de frontend. El desarrollador de tornados bdarnell tiene un esqueleto de producción de tornados que ilustra esto utilizando Supervisor (gestión de procesos) y nginx (proxy).

Gestión de proceso

Tradicionalmente, las aplicaciones Tornado son de un solo proceso y requieren un administrador de procesos externo, sin embargo, HTTPServer puede ejecutarse con múltiples procesos . Además, hay un par de ayudantes adicionales para ayudar con la gestión de múltiples procesos.

Supervisor

  • Administración de múltiples aplicaciones de Pylons con Supervisor : un excelente tutorial para comenzar a trabajar con Supervisor
  • Implementar la aplicación de tornado – tutorial corto con Supervisor y tutorial de configuración de nginx
  • supervisord-example.conf – este es un ejemplo cfg para ejecutar 4 instancias de tornado
  • Módulo Supervisod de Nginx : este módulo permite a nginx iniciar / detener backends a pedido

Daemonización

  • Ejemplo de start-stop-daemon : si está ejecutando un sistema Linux estándar, esta es una forma fácil de demonizar su aplicación Tornado
  • Ejemplo de Upstart : Upstart está integrado en Ubuntu y puede reaparecer instancias fallidas.

Tornado multiproceso

Como se mencionó anteriormente, el HTTPServer de Tornado se puede configurar para ambos procesos en uno o varios sockets.

Proxying

Los documentos oficiales incluyen un ejemplo para ejecutar nginx como un proxy de equilibrio de carga y para servir archivos estáticos.

Despliegue

  • Implementación de aplicaciones web de Python (Tornado) en múltiples servidores : breve discusión sobre el uso de un Load Balancer para la migración en vivo sin tiempo de inactividad
  • Despliegue rodante con tela
  • Anti-patrones de implementación de Python
  • buedafab – una buena colección de scripts de implementación de Fabric con EC2

En resumen: use supervisord y / o nginx .

Consulte este enlace: http://blog.thisisfeifan.com/2012/06/deploy-tornado-application.html

Estoy usando Python 3 y supervisord no es compatible con python3 actualmente. Mi solucion es nativa

cree un nuevo archivo como “my_tornado_app.service” en “/ etc / systemd / system /”

y contenido

 [Unit] Description=MyTornadoApp1.0 [Service] ExecStart=/usr/bin/python3 /var/vhosts/mytornado-app/app.py User=www-data Restart=on-failure [Install] WantedBy=multi-user.target 

Ahora:

 sudo systemctl daemon-reload sudo systemctl enable my_tornado_app.service.service sudo systemctl start my_tornado_app.service.service 

¡Y trabajando!