o iniciante e o supervisord são usados ​​para a mesma coisa?

13

Eu tenho alguns processos baseados em jvm que preciso garantir sempre que meu servidor for reinicializado, e também se for interrompido devido a um erro inesperado, etc.

Estou executando o Ubuntu 12.04 no caso de questões.

Eu já vi exemplos de scripts iniciantes e estou me inclinando dessa maneira, mas quero entender quais são as diferenças com algo como upstart ou supervisord.

Eles são usados ​​exatamente para os mesmos fins ou há diferenças na funcionalidade?

Blankman
fonte

Respostas:

12

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:

  1. O serviço não daemonize adequadamente
  2. 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.

jordanm
fonte
Entendo, não sei se entendi completamente, mas achei que o iniciante também pode reiniciar o processo se ele falhar.
Blankman
@Blankman Eu acho que há ainda menos razões com os sistemas de inicialização modernos
jordanm
Eu observaria que a solução adequada para um serviço que não daemoniza adequadamente seria corrigir o bug com o referido serviço que faz com que ele não daemonize adequadamente. Eu vou admitir que algo como supervisord seria útil para o # 2, no entanto.
Shadur 28/03/2013
1
@shadur Não concordo que seja a melhor solução. O processo pode não pertencer a você, então você não pode corrigi-lo. Mesmo se você puder corrigi-lo, não importa quantos bugs você conserte, você nunca saberá que não há mais espreitas e, anos depois, seu processo morrerá mais uma vez, em produção, devido a alguma situação que nunca foi exposta antes, como uma condição incomum de rede ou banco de dados. Você prefere que seu site permaneça offline, frustrando os usuários e custando dinheiro? Não. Você precisa de uma ferramenta para reiniciar os serviços. Período.
Jonathan Hartley