Tornado no se reinicia limpiamente en supervisor

Estoy usando tornado para ejecutar una aplicación de matraz, y tengo un script de shell que hace un poco de trabajo y luego ejecuta la aplicación.

#!/usr/bin/env bash some_work more_work python /usr/share/theapp/theapp.py 

Yo uso supervisor para administrar este pequeño script. La puesta en marcha funciona bien ( sudo supervisorctl start theapp.sh ), pero cuando quiero reiniciar, el subproceso de Python no se cierra y se queda colgado, ocupando el puerto e impidiendo el inicio nuevamente. He intentado agregar capturas para garantizar que el código de python realmente se detenga cuando el supervisor detiene la secuencia de comandos, pero esto no ha funcionado. He intentado cambiar el tornado para el servidor wsgi de gevent y he tenido el mismo problema. ¿Cómo debo estar haciendo este pequeño guión?

La señal TERM se envía solo al script bash theapp.sh y nunca es recibida por el proceso python. Puede probar la opción stopasgroup en la sección del progtwig de la configuración del supevisor, que es más compatible con la forma en que bash (y otros shells) manejan las señales [1].

[1] http://www.vidarholen.net/contents/blog/?p=34

Alternativamente, si su script de shell solo realiza tareas de preparación y nada después del comando “real”, puede reemplazar la última línea con

 exec python /usr/share/theapp/theapp.py 

Lo que reemplazará el proceso de shell con el proceso de Python, por lo que este último recibe la señal directamente y con el beneficio adicional de que no tiene un proceso de shell inactivo ejecutándose todo el tiempo.

He tenido problemas similares con supervisord y uwsgi, pero también podría ser válido para Tornado. El problema es con la señal que el servicio Tornado espera reiniciar. La señal predeterminada que envía Supervord es SIG_TERM (consulte la señal de parada en los documentos ). No estoy seguro de lo que Tornado espera, pero puedes probar algunas opciones más en la configuración de supervisor, como:

 # /etc/supervisor.d/myprogram.ini # http://supervisord.org/configuration.html#program-x-section-values [program:myprogram] command=/path/to/script/ .... stopsignal=INT 

o

 stopsignal=HUP