A diferença é que upstart é uma substituição init, enquanto supervisord é a Process Control System
. Esta explicação é dada no site do supervisord :
Ele compartilha alguns dos mesmos objetivos de programas como launchd, daemontools e runit. Ao contrário de alguns desses programas, ele não deve ser executado como um substituto para o init como "ID do processo 1". Em vez disso, deve ser usado para controlar processos relacionados a um projeto ou cliente, e deve iniciar como qualquer outro programa no momento da inicialização.
Isso significa que a própria supervisord seria iniciada pelo upstart, por meio de um arquivo de trabalho upstart ou de um script init sysV. Pessoalmente, optei por usar um gerenciador de processos em vez de iniciar com simplicidade pelos seguintes motivos:
- O serviço não daemonize adequadamente
- Sabe-se que o serviço morre e precisa ser monitorado e reiniciado
Um exemplo de um programa que não é daemon adequadamente é quando ele não fecha stdout e stderr e continua a gravar dados nesses locais. O Supervisord pode lidar com o registro dessa saída.