The difference is that upstart is an init replacement whereas supervisord is a
Process Control System. This explanation is given on the supervisord site:
It shares some of the same goals of programs like launchd,
daemontools, and runit. Unlike some of these programs, it is not meant
to be run as a substitute for init as “process id 1”. Instead it is
meant to be used to control processes related to a project or a
customer, and is meant to start like any other program at boot time.
This means that supervisord itself would be started by upstart, either via an upstart job file, or a sysV init script. Personally, I have chosen to use a process manager rather than plain init starting for the following reasons:
- The service does not properly daemonize
- The service is known to die an needs to be monitored and restarted
An example of a program not properly daemonizing is when it doesn't close stdout and stderr and continues to write data to those locations. Supervisord can handle the logging of that output.