[Web-SIG] Daemon server management

Ian Bicking ianb at colorstudy.com
Sat Jun 11 00:28:49 CEST 2005


As a followup on this, this is what I have so far:

When starting:

if os.path.exists(pidfile):
     f = open(pidfile)
     pid = int(f.read().strip())
     f.close()
     try:
         os.kill(pid, signal.SIG_DFL) # SIG 0, should do nothing
     except OSError:
         # Means no such process exists
         log('PID file %s exists, but process %i no longer running'
             % (pidfile, pid))
         os.unlink(pidfile)
     else:
         print "Can't start, another server running (%i)" % pid
         sys.exit(1)

I guess there's some possible race conditions at this point.  But I'm 
not sure how to resolve those.  I guess I could do Jacob's 
fd=os.open(fname, os.O_CREATE | os.O_EXCL) later.  And match instead of 
os.path.exists() and open() I should open the pid file similarly in that 
code block above.


Later, when killing the process, I'm doing:

os.kill(pid, signal.SIGTERM)

But I'm not sure if that's right either.  The process seems to die, 
instead of properly terminating.  Should I send another signal, and set 
up a signal handler in the server?  Then perhaps I would send that 
signal, wait a bit, and send SIGTERM if it didn't stop on its own?

-- 
Ian Bicking  /  ianb at colorstudy.com  /  http://blog.ianbicking.org


More information about the Web-SIG mailing list