2011-09-09 10 views
6

Ho scritto un semplice server HTTP in python per gestire un database ospitato su un server tramite un'interfaccia utente web. È perfettamente funzionante e funziona come previsto. Tuttavia ha un enorme problema, non rimarrà. Funzionerà per un'ora o giù di lì, ma se lasciato inutilizzato per lunghi periodi di tempo quando si torna a usarlo, devo inizializzarlo di nuovo ogni volta. In questo momento il metodo che uso per farlo servire è:Come faccio a mantenere un server HTTP python per sempre?

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

if __name__ == '__main__': 
    main() 

ho eseguito questo in background su un server Linux quindi vorrei eseguire un comando come sudo python webserver.py & per staccarlo, ma come ho già detto in precedenza dopo un po 'si chiude. Qualsiasi consiglio è apprezzato perché così com'è non vedo perché si spegne.

+0

I demoni sono buoni. – Vamsi

+5

"dopo un po 'si chiude". Hai davvero bisogno di risolvere questo problema. Tutto il resto è facile dopo aver capito che cosa "lascia". Si prega di definire "chiudi" più precisamente. Si prega di ** aggiornare ** la domanda con il giusto motivo per cui si chiude. –

risposta

1

Bene, il primo passo è capire perché si blocca. Esistono due possibilità:

  • La chiamata a servizio_forever genera un'eccezione.
  • Il processo Python si sta bloccando/sta per terminare.

Nel primo caso, è possibile farlo vivere per sempre avvolgendolo in un ciclo, con una prova, tranne. Probabilmente è una buona idea registrare i dettagli dell'errore.

Quest'ultimo caso è un po 'più complicato, perché potrebbe essere causato da una varietà di cose. Succede se si esegue lo script in primo piano? In caso contrario, potrebbe esserci qualche tipo di servizio di manutenzione in esecuzione che sta terminando il tuo script?

Non proprio una risposta completa, ma forse sufficiente per aiutarti a diagnosticare il problema.

1

Hai provato a eseguirlo da una sessione screen?

$ screen -L sudo python webserver.py 
0

In alternativa allo schermo c'è NoHup che garantirà il processo porta a correre dopo la vostra disconnesso.

Vale la pena controllare i registri per capire perché è stato eliminato/chiuso e potrebbe non essere correlato al sistema operativo ma a un errore interno.

3

È possibile scrivere un UNIX daemon in Python utilizzando il pacchetto python-daemon o uno Windows service utilizzando pywin32.

Sfortunatamente, non conosco nessuna soluzione "portatile" per scrivere processi demone/servizio (in Python o in altro modo).

2

Ecco un consiglio in una storia sulla guida. Certamente vuoi guidare in sicurezza (capisci perché il tuo programma sta fallendo e risolvilo). Nel caso (raro?) Di un arresto anomalo, alcune infrastrutture di monitoraggio, come monit, possono essere utili per riavviare i processi bloccati. Probabilmente non vorresti usarlo su carta in caso di incidente, proprio come se non volessi distribuire l'air bag ogni volta che fermavi la macchina.

Problemi correlati