2011-09-09 7 views
6

Escribí un servidor HTTP simple en python para administrar una base de datos alojada en un servidor a través de una interfaz de usuario web. Es perfectamente funcional y funciona según lo previsto. Sin embargo, tiene un gran problema, no se quedará. Funcionará durante una hora más o menos, pero si no la utilizo durante largos períodos de tiempo cuando vuelva a utilizarla, debo volver a inicializarla siempre. En este momento el método que utilizo para hacerlo servir es:¿Cómo mantengo un servidor HTTP python para siempre?

def main(): 
    global db 
    db = DB("localhost") 
    server = HTTPServer(('', 8080), MyHandler) 
    print 'started httpserver...' 
    server.serve_forever() 

if __name__ == '__main__': 
    main() 

corro esto en el fondo en un servidor Linux, así que ejecutar un comando como el pitón sudo webserver.py & para separarla, pero como he mencionado previamente después de un tiempo se cierra. Cualquier consejo es apreciado porque tal como está, no veo por qué se apaga.

+0

Los demonios son buenos. – Vamsi

+5

"después de un tiempo se cierra". Realmente necesitas resolver ese problema. Todo lo demás es fácil después de averiguar qué "se cierra". Por favor, define "deja" más precisamente. Por favor ** actualice ** la pregunta con la razón correcta por la que se cierra. –

Respuesta

1

Bueno, el primer paso es descubrir por qué está fallando. Hay dos posibilidades probables:

  • La llamada serve_forever está arrojando una excepción.
  • El proceso de Python está fallando/finalizando.

En el primer caso, puede hacerlo vivir para siempre envolviéndolo en un bucle, con un intento, excepto. Probablemente sea una buena idea registrar los detalles del error.

El último caso es un poco más complicado, porque podría ser causado por una variedad de cosas. ¿Sucede si ejecuta el script en primer plano? Si no, ¿tal vez hay algún tipo de servicio de mantenimiento en ejecución que está terminando su script?

No es realmente una respuesta completa, pero tal vez lo suficiente para ayudarlo a diagnosticar el problema.

1

¿Ha intentado ejecutarlo desde dentro de una sesión screen?

$ screen -L sudo python webserver.py 
0

Como alternativa a la pantalla hay NoHup lo que garantizará el proceso lleva en funcionamiento después de su cerrado la sesión.

Vale la pena verificar los registros para ver por qué se mata/deja de fumar, así como también puede no estar relacionado con el sistema operativo, sino un error interno.

3

Puede escribir un UNIX daemon en Python usando el paquete python-daemon, o un Windows service usando el pywin32.

Lamentablemente, no conozco ninguna solución "portátil" para escribir procesos daemon/servicio (en Python, o de otro modo).

2

Aquí hay un consejo en una historia sobre la conducción. Sin duda, desea conducir de forma segura (averiguar por qué su programa está fallando y solucionarlo). En el (raro) caso de un bloqueo, alguna infraestructura de monitoreo, como monit, puede ser útil para reiniciar procesos bloqueados. Probablemente no desee utilizarlo para guardar el papel en caso de accidente como si no deseara desplegar su bolsa de aire cada vez que detuviera el automóvil.

Cuestiones relacionadas