[Web-SIG] Daemon server management

David Fraser 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 
working.

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.

David


More information about the Web-SIG mailing list