2.1 (2007-03-17)

  • When supervisord was invoked more than once, and its configurationwas set up to use a UNIX domain socket as the HTTP server, thesocket file would be erased in error. The symptom of this wasthat a subsequent invocation of supervisorctl could not find thesocket file, so the process could not be controlled (it and all ofits subprocesses would need to be killed by hand).
  • Close subprocess file descriptors properly when a subprocess exitsor otherwise dies. This should result in fewer “too many openfiles to spawn foo” messages when supervisor is left up for longperiods of time.
  • When a process was not killable with a “normal” signal at shutdowntime, too many “INFO: waiting for x to die” messages would be sentto the log until we ended up killing the process with a SIGKILL.Now a maximum of one every three seconds is sent up until SIGKILLtime. Thanks to Ian Bicking.
  • Add an assertion: we never want to try to marshal None to XML-RPCcallers. Issue 223 in the collector from vgatto indicates thatsomehow a supervisor XML-RPC method is returning None (whichshould never happen), but I cannot identify how. Maybe theassertion will give us more clues if it happens again.
  • Supervisor would crash when run under Python 2.5 because thexmlrpclib.Transport class in Python 2.5 changed in abackward-incompatible way. Thanks to Eric Westra for the bugreport and a fix.
  • Tests now pass under Python 2.5.
  • Better supervisorctl reporting on stop requests that have a FAILEDstatus.
  • Removed duplicated code (readLog/readMainLog), thanks to MikeNaberezny.
  • Added tailProcessLog command to the XML-RPC API. It provides amore efficient way to tail logs than readProcessLog(). UsereadProcessLog() to read chunks and tailProcessLog() to tail.(thanks to Mike Naberezny).