[Web-SIG] Daemon server management
davidf at sjsoft.com
Fri Jun 10 07:20:33 CEST 2005
Ian Bicking wrote:
>I asked this on the Paste list, but no opinions there... maybe someone
>here has a thought on this...
>Does anyone have opinions on how to start and stop daemon servers? I've
>added a --daemon option to paster serve, but I'd like to implement stop,
>restart, and reload as well. Whenever I encounter servers that clobber
>pid files, or where the only way you can tell you've started a server
>twice is that you get an error message about not being able to bind to
>the port, it annoys me. But I'm not sure how to best implement a better
>system. Especially cross-platform -- though an entirely separate
>process for Windows might make sense (as a windows service or something).
>Opinions? Or examples of other servers (preferably Python-based) that
>do this well?
I think other people have expressed better ideas, but here are some of
mine I recently implemented...
This is from jToolkit (jtoolkit.sf.net but the site is horribly out of
date) which I use for commercial work and for Pootle (pootle.wordforge.net)
I wanted to make the server reload as quickly as possible with minimal
handover time. So what I did is make a parent process which simply runs
a child process that does all the actual work. When a reload is
signalled, a new child is run. When it is ready to bind to the socket, a
signal is sent to the first child, which finishes handling its current
requests and then closes its listening socket. As soon as it closes the
socket, it sends a signal back to the new child which binds to the socket.
I think this could be improved by using the same bound socket and
forking, but the idea of signalling and handover is quite nice. Not sure
how to do it on Windows though...
I also had a look into trying to pass sockets between processes which
you're meant to be able to do with the win32 api but didn't quite get it
As an aside, I have found problems with Python not releasing allocated
memory which is why I need to restart every so often in the above manner.
More information about the Web-SIG