Search code examples
pythonhttpshutdown

How do I keep a python HTTP Server up forever?


I wrote a simple HTTP server in python to manage a database hosted on a server via a web UI. It is perfectly functional and works as intended. However it has one huge problem, it won't stay put. It will work for an hour or so, but if left unused for long periods of time when returning to use it I have to re-initialize it every time. Right now the method I use to make it serve is:

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

if __name__ == '__main__':
    main()

I run this in the background on a linux server so I would run a command like sudo python webserver.py & to detach it, but as I mentioned previously after a while it quits. Any advice is appreciated cause as it stands I don't see why it shuts down.


Solution

  • Well, first step is to figure out why it's crashing. There's two likely possibilities:

    • The serve_forever call is throwing an exception.
    • The python process is crashing/being terminated.

    In the former case, you can make it live forever by wrapping it in a loop, with a try-except. Probably a good idea to log the error details.

    The latter case is a bit trickier, because it could be caused by a variety of things. Does it happen if you run the script in the foreground? If not, maybe there's some kind of maintenance service running that is terminating your script?

    Not really a complete answer, but perhaps enough to help you diagnose the problem.