123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- 3.0a2
- - Fixed the README.txt example for defining the supervisor RPC
- interface in the configuration file. Thanks to Drew Perttula.
- - Fixed a bug where process communication events would not have the
- proper payload if the payload data was very short.
- - when supervisord attempted to kill a process with SIGKILL after
- the process was not killed within "stopwaitsecs" using a "normal"
- kill signal, supervisord would crash with an improper
- AssertionError. Thanks to Calvin Hendryx-Parker.
- - On Linux, Supervisor would consume too much CPU in an effective
- "busywait" between the time a subprocess exited and the time at
- which supervisor was notified of its exit status. Thanks to Drew
- Perttula.
- - RPC interface behavior change: if the RPC method
- "sendProcessStdin" is called against a process that has closed its
- stdin file descriptor (e.g. it has done the equivalent of
- "sys.stdin.close(); os.close(0)"), we return a NO_FILE fault
- instead of accepting the data.
- - Changed the semantics of the process configuration 'autorestart'
- parameter with respect to processes which move between the RUNNING
- and EXITED state. 'autorestart' was previously a boolean. Now
- it's a trinary, accepting one of 'false', 'unexpected', or 'true'.
- If it's 'false', a process will never be automatically restarted
- from the EXITED state. If it's 'unexpected', a process that
- enters the EXITED state will be automatically restarted if it
- exited with an exit code that was not named in the process
- config's 'exitcodes' list. If it's 'true', a process that enters
- the EXITED state will be automatically restarted unconditionally.
- The default is now 'unexpected' (it was previously 'true'). The
- readdition of this feature is a reversion of the behavior change
- note in the changelog notes for 3.0a1 that asserted we never cared
- about the process' exit status when determining whether to restart
- it or not.
- - setup.py develop (and presumably setup.py install) would fail
- under Python 2.3.3, because setuptools attempted to import
- 'splituser' from urllib2, and it didn't exist.
- - It's now possible to use 'setup.py install' and 'setup.py develop'
- on systems which do not have a C compiler if you set the environment
- variable "NO_MELD3_EXTENSION_MODULES=1" in the shell in which
- you invoke these commands (a new version of meld3, 0.6.1 was released
- which respects this envvar and does not try to compile its optional
- C extensions when it's set).
- - The test suite would fail on Python versions <= 2.3.3 because
- the "assertTrue" and "assertFalse" methods of unittest.TestCase
- didn't exist in those versions.
- - The 'supervisorctl' and 'supervisord' wrapper scripts were disused
- in favor of using setuptools' 'console_scripts' entry point settings.
- - Documentation files and the sample configuration file are put into
- the generated supervisor egg's 'doc' directory.
- 3.0a1
- - Default config file comment documented 10 secs as default for
- 'startsecs' value in process config, in reality it was 1 sec.
- Thanks to Christoph Zwerschke.
- - Make note of subprocess environment behavior in README.txt.
- Thanks to Christoph Zwerschke.
- - New "strip_ansi" config file option attempts to strip ANSI escape
- sequences from logs for smaller/more readable logs (submitted by
- Mike Naberezny).
- - The XML-RPC method supervisor.getVersion() has been renamed for
- clarity to supervisor.getAPIVersion(). The old name is aliased
- for compatibility but is deprecated and will be removed in a
- future version (Mike Naberezny).
- - Improved web interface styling (Mike Naberezny, Derek DeVries)
- - The XML-RPC method supervisor.startProcess() now checks that
- the file exists and is executable (Mike Naberezny).
- - Two environment variables, "SUPERVISOR_PROCESS_NAME" and
- "SUPERVISOR_PROCESS_GROUP" are set in the environment of child
- processes, representing the name of the process and group in
- supervisor's configuration.
- - Process state map change: a process may now move directly from the
- STARTING state to the STOPPING state (as a result of a stop
- request).
- - Behavior change: if 'autorestart' is true, even if a process exits
- with an "expected" exit code, it will still be restarted. In the
- immediately prior release of supervisor, this was true anyway, and
- no one complained, so we're going to consider that the "officially
- correct" behavior from now on.
- - Supervisor now logs subprocess stdout and stderr independently.
- The old program config keys "logfile", "logfile_backups" and
- "logfile_maxbytes" are superseded by "stdout_logfile",
- "stdout_logfile_backups", and "stdout_logfile_maxbytes". Added
- keys include "stderr_logfile", "stderr_logfile_backups", and
- "stderr_logfile_maxbytes". An additional "redirect_stderr" key is
- used to cause program stderr output to be sent to its stdin
- channel. The keys "log_stderr" and "log_stdout" have been
- removed.
- - '[program:x]' config file sections now represent "homgeneous
- process groups" instead of single processes. A "numprocs" key in
- the section represents the number of processes that are in the
- group. A "process_name" key in the section allows composition of
- the each process' name within the homogeneous group.
- - A new kind of config file section, '[group:x]' now exists,
- allowing users to group heterogeneous processes together into a
- process group that can be controlled as a unit from a client.
- - Supervisord now emits "events" at certain points in its normal
- operation. These events include supervisor state change events,
- process state change events, and "process communication events".
- - A new kind of config file section '[eventlistener:x]' now exists.
- Each section represents an "event listener pool", which is a
- special kind of homogeneous process group. Each process in the
- pool is meant to receive supervisor "events" via its stdin and
- perform some notification (e.g. send a mail, log, make an http
- request, etc.)
- - Supervisord can now capture data between special tokens in
- subprocess stdout/stderr output and emit a "process communications
- event" as a result.
- - Supervisor's XML-RPC interface may be extended arbitrarily by
- programmers. Additional top-level namespace XML-RPC interfaces
- can be added using the '[rpcinterface:foo]' declaration in the
- configuration file.
- - New 'supervisor'-namespace XML-RPC methods have been added:
- getAPIVersion (returns the XML-RPC API version, the older
- "getVersion" is now deprecated), "startProcessGroup" (starts all
- processes in a supervisor process group), "stopProcessGroup"
- (stops all processes in a supervisor process group), and
- "sendProcessStdin" (sends data to a process' stdin file
- descriptor).
- - 'supervisor'-namespace XML-RPC methods which previously accepted
- ony a process name as "name" (startProcess, stopProcess,
- getProcessInfo, readProcessLog, tailProcessLog, and
- clearProcessLog) now accept a "name" which may contain both the
- process name and the process group name in the form
- 'groupname:procname'. For backwards compatibility purposes,
- "simple" names will also be accepted but will be expanded
- internally (e.g. if "foo" is sent as a name, it will be expanded
- to "foo:foo", representing the foo process within the foo process
- group).
- - 2.X versions of supervisorctl will work against supervisor 3.0
- servers in a degraded fashion, but 3.X versions of supervisorctl
- will not work at all against supervisor 2.X servers.
- Known issues:
- - supervisorctl and the web interface do not yet allow you to stop
- / start / restart a process group as a unit.
- - supervisorctl and the web interface do not allow you to tail or
- otherwise examine stderr log files of processes.
- - buffered event notifications may be lost at supervisor shutdown
- or restart time.
- Acknowledgements:
- Maintainable Software (http://www.maintainable.com) contracted
- Agendless Consulting to add the event notification features and
- extensible XML-RPC namespaces feature to supervisor.
- 2.2b1
- - Individual program configuration sections can now specify an
- environment.
- - Added a 'version' command to supervisorctl. This returns the
- version of the supervisor2 package which the remote supervisord
- process is using.
- 2.1
- - When supervisord was invoked more than once, and its configuration
- was set up to use a UNIX domain socket as the HTTP server, the
- socket file would be erased in error. The symptom of this was
- that a subsequent invocation of supervisorctl could not find the
- socket file, so the process could not be controlled (it and all of
- its subprocesses would need to be killed by hand).
- - Close subprocess file descriptors properly when a subprocess exits
- or otherwise dies. This should result in fewer "too many open
- files to spawn foo" messages when supervisor is left up for long
- periods of time.
- - When a process was not killable with a "normal" signal at shutdown
- time, too many "INFO: waiting for x to die" messages would be sent
- to the log until we ended up killing the process with a SIGKILL.
- Now a maximum of one every three seconds is sent up until SIGKILL
- time. Thanks to Ian Bicking.
- - Add an assertion: we never want to try to marshal None to XML-RPC
- callers. Issue 223 in the collector from vgatto indicates that
- somehow a supervisor XML-RPC method is returning None (which
- should never happen), but I cannot identify how. Maybe the
- assertion will give us more clues if it happens again.
- - Supervisor would crash when run under Python 2.5 because the
- xmlrpclib.Transport class in Python 2.5 changed in a
- backward-incompatible way. Thanks to Eric Westra for the bug
- report and a fix.
- - Tests now pass under Python 2.5.
- - Better supervisorctl reporting on stop requests that have a FAILED
- status.
- - Removed duplicated code (readLog/readMainLog), thanks to Mike
- Naberezny.
- - Added tailProcessLog command to the XML-RPC API. It provides a
- more efficient way to tail logs than readProcessLog(). Use
- readProcessLog() to read chunks and tailProcessLog() to tail.
- (thanks to Mike Naberezny).
- 2.1b2
- - Added new tailProcessLog() command to the XML-RPC API that
- is more efficient for just tailing than the existing
- readProcessLog() command (Mike Naberezny).
- 2.1b1
- - "supervisord -h" and "supervisorctl -h" did not work (traceback
- instead of showing help view (thanks to Damjan from Macedonia for
- the bug report).
- - Processes which started successfully after failing to start
- initially are no longer reported in BACKOFF state once they are
- started successfully (thanks to Damjan from Macdonia for the bug
- report).
- - Add new 'maintail' command to supervisorctl shell, which allows
- you to tail the 'main' supervisor log. This uses a new
- readMainLog xmlrpc API.
- - Various process-state-transition related changes, all internal.
- README.txt updated with new state transition map.
- - startProcess and startAllProcesses xmlrpc APIs changed: instead of
- accepting a timeout integer, these accept a wait boolean (timeout
- is implied by process' "startsecs" configuration). If wait is
- False, do not wait for startsecs.
- Known issues:
- Code does not match state transition map. Processes which are
- configured as autorestarting which start "successfully" but
- subsequently die after 'startsecs' go through the transitions
- RUNNING -> BACKOFF -> STARTING instead of the correct transitions
- RUNNING -> EXITED -> STARTING. This has no real negative effect,
- but should be fixed for correctness.
- 2.0
- - pidfile written in daemon mode had incorrect pid.
- - supervisorctl: tail (non -f) did not pass through proper error
- messages when supplied by the server.
- - Log signal name used to kill processes at debug level.
- - supervisorctl "tail -f" didn't work with supervisorctl sections
- configured with an absolute unix:// URL
- - New "environment" config file option allows you to add environment
- variable values to supervisord environment from config file.
- 2.0b1
- - fundamental rewrite based on 1.0.6, use distutils (only) for
- installation, use ConfigParser rather than ZConfig, use HTTP for
- wire protocol, web interface, less lies in supervisorctl.
|