A diferença é que o upstart é um substituto do init, enquanto o supervisord é um Process Control System
. Essa explicação é dada no 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.
Isso significa que o próprio supervisord seria iniciado pelo upstart, seja por meio de um arquivo de trabalho upstart ou de um script init sysV. Pessoalmente, escolhi usar um gerenciador de processos em vez de um init simples, começando pelos seguintes motivos:
- O serviço não daemoniza corretamente
- O serviço é conhecido por morrer e precisa ser monitorado e reiniciado
Um exemplo de um programa que não é daemonizing corretamente é quando ele não fecha stdout e stderr e continua gravando dados nesses locais. A Supervisord pode lidar com o registro dessa saída.