Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 752
SuperFamousGuy Avatar asked Sep 09 '11 15:09

SuperFamousGuy


2 Answers

You can write a UNIX daemon in Python using the python-daemon package, or a Windows service using the pywin32.

Unfortunately, I know of no "portable" solution to writing daemon / service processes (in Python, or otherwise).

like image 94
André Caron Avatar answered Sep 25 '22 04:09

André Caron


Here's one piece of advice in a story about driving. You certainly want to drive safely (figure out why your program is failing and fix it). In the (rare?) case of a crash, some monitoring infrastructure, like monit, can be helpful to restart crashed processes. You probably wouldn't want to use it to paper over a crash just like you wouldn't want to deploy your air bag every time you stopped the car.

like image 36
Paul Rubel Avatar answered Sep 26 '22 04:09

Paul Rubel