Supervisor: Diferenças entre reler, recarregar, reiniciar, atualizar?

Criado em 13 fev. 2016  ·  30Comentários  ·  Fonte: Supervisor/supervisor

Talvez eu tenha perdido, mas há uma boa explicação em algum lugar sobre as diferenças entre esses quatro comandos? Eu não os vi discutidos na documentação online do supervisor. Percebi no ServerFault e no Stackoverflow que outros usuários também não entendem suas diferenças.

Por exemplo, se eu alterar a configuração em uma seção do programa, sei que devo fazer "supervisorctl reread" para que essas alterações sejam disponibilizadas. Mas como você reinicia apenas esse programa? reinicialização do supervisorctlnão funciona. Em vez disso, se parecer que você deve executar "supervisorctl update" ou reiniciar o próprio daemon do supervisor. No entanto, isso parece ter o efeito não intencional de reiniciar todos os programas, não apenas o que mudou.

Obrigado.

docs

Comentários muito úteis

As definições a seguir funcionariam para a documentação?

reler - Reler a configuração do supervisor. Não atualize ou reinicie os serviços em execução.
update - Reinicia o(s) serviço(s) cuja configuração foi alterada. Geralmente executado após 'reler'.
reload - Releia a configuração do supervisor, recarregue supervisord e supervisorctl , reinicie os serviços que foram iniciados.
reiniciar - Reiniciar serviço(s)

Todos 30 comentários

Talvez eu tenha perdido, mas há uma boa explicação em algum lugar sobre as diferenças entre esses quatro comandos?

Não, isso deve ser adicionado à documentação. Adicionei o rótulo de documentos e deixarei este problema em aberto para que possamos fazer isso.

Ainda acho os documentos atuais confusos.

Obrigado, amigo.

Em terça-feira, 13 de dezembro de 2016 às 7h35, Paweł Adamczak [email protected]
escrevi:

O que me ajudou - http://www.onurguzel.com/supervisord-restarting-and-
recarregando/


Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/Supervisor/supervisor/issues/720#issuecomment-266770482 ,
ou silenciar o thread
https://github.com/notifications/unsubscribe-auth/AEgNpM6R9BMwE03q_DejU96qUOef8zCtks5rHrtMgaJpZM4HZsaj
.

@flaugher Ainda acho que vale a pena manter esse problema em aberto, pois os documentos ainda não possuem as informações relevantes.

Na verdade, eu estava planejando fazer um PR no fim de semana.

Se você quiser reabri-lo, vá em frente. Não vi nada de novo e superei o problema e não queria continuar recebendo notificações. Eu não consegui descobrir como silenciá-lo, então eu apenas o fechei.

Em 13 de dezembro de 2016, às 16h03, Paweł Adamczak [email protected] escreveu:

@flaugher Ainda acho que vale a pena manter esse problema em aberto, pois os documentos ainda não têm as informações.

Na verdade, eu estava planejando fazer um PR no fim de semana.


Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub ou silencie a conversa.

Como não sou membro do projeto ou criador de problemas, não consigo abri-lo, mas entendo seu ponto completamente.

BTW - Tanto quanto sei, você pode cancelar a inscrição nas notificações no menu do lado direito na visualização de problemas

Por último - desculpe pelo spam : -)

Olá a todos.

IMHO , concordo com a reabertura desta edição.

Embora o documento abaixo possa esclarecer o problema, parece um pouco vago em relação às definições.

Em relação à ação "atualizar", acredito que há mais coisas a serem descritas ou melhor descritas, por exemplo.

Aqui está o cenário: quando você cria uma configuração para um processo a ser gerenciado pelo "supervisord", você executa "supervisorctl update" e então vem a mensagem "your_configured_process: add process group". Existe algum tipo de grupo controlado por "supervisord", que deve conter um registro que especifique que seu processo agora é gerenciado por "superviord"?

Nas minhas últimas pesquisas no Google, também encontrei esta página de manual no site do Ubuntu e parece não ter explicações para as ações do supervisorctl.

Alguém (membro do projeto) pode reabrir esta questão? Parece que não sou o único que acredita que isso deve ser feito.

Obrigado
@ivanleoncz

Então, onde a resposta?

+1 para reabertura. reread|reload|restart|update ainda não foram documentados.

Olá, desculpe ser esse cara, mas podemos reabrir esse problema? Obrigado.

@pawelad Como isso te ajudou? A segunda frase está totalmente errada.

No entanto, não tem uma opção de recarga.

O supervisor certamente tem uma opção reload ...

No entanto, alguém aqui que realmente apreciaria alguma documentação _usável_ ...

Uau. Eu não posso acreditar que este problema existe. Obrigado @ivanlmj pelos links informativos.

De nada, @cornfeedhobo . Obrigado por sobre este problema :).

Alguém por favor explique a ação reload : o que eu estou esperando desta é basicamente uma reread + update . É esse o comportamento atual?

Certamente não é, mas você pensaria assim! Cara, alguns documentos atualizados seriam ótimos agora ....

@mnaberez podemos ter uma definição clara de cada um desses termos?
Se você puder detalhá-los aqui, ficarei feliz em fazer um pull request para os documentos.

As definições a seguir funcionariam para a documentação?

reler - Reler a configuração do supervisor. Não atualize ou reinicie os serviços em execução.
update - Reinicia o(s) serviço(s) cuja configuração foi alterada. Geralmente executado após 'reler'.
reload - Releia a configuração do supervisor, recarregue supervisord e supervisorctl , reinicie os serviços que foram iniciados.
reiniciar - Reiniciar serviço(s)

Muito bom!
Você certificou que esses são os aspectos reais de cada ação, @ocervell ? Se você tiver certeza, seria bom enviar um PR para a documentação! Apenas dizendo :)! Obrigado!

Tentei reler e atualizar supervisorctl e descobri que 'update' apenas faz o trabalho de releitura: recarregar a configuração do aplicativo. então qual é a necessidade da ação de 'reler'? achei confuso

$ supervisorctl help update
update          Reload config and add/remove as necessary, and will restart affected programs
update all      Reload config and add/remove as necessary, and will restart affected programs
update <gname> [...]    Update specific groups

Então reread não é necessário?

Ainda acho um pouco confuso. Atualmente eu corro update e restart all em uma atualização do nosso software. Isto pode ser:

  • Um arquivo de configuração do supervisor é alterado
  • Um script é alterado e requer reinicialização.

Mas quando uma configuração de supervisor é atualizada, o script é reiniciado duas vezes (porque update e restart all ). Eu também tentei reread e restart all , mas neste caso os novos arquivos de configuração não foram iniciados automaticamente.

Existe um comando ou combinação de comandos que irá recarregar todos os arquivos de configuração e reiniciar todos os scripts sem reiniciá-los duas vezes e carregar e iniciar novos arquivos de configuração encontrados?

Ninguém na pergunta de @Wouter0100 ?

@Wouter0100 Considerando que você "reinicia tudo" o que deseja pode ser melhor realizado por um "realod", embora de uma maneira um pouco diferente:
Reload irá parar o daemon do supervisor, recarregar a configuração e reiniciar o daemon. Supondo que seus processos tenham autostart=true (o padrão), tudo será reiniciado exatamente uma vez.

Se você precisar de algo menos abrangente, temo que esteja sem sorte: reler não iniciará novos processos encontrados (como você notou) e a atualização será reiniciada apenas se a configuração mudar, e não reiniciará processos (por exemplo) cujo (supervisord ) config permaneceu o mesmo, mas cujo executável mudou para uma nova versão.

Eu postei outra solução em # 1264.

@AlekSi não é realmente uma solução, pois isso requer a especificação de cada arquivo individualmente.

Bem, isso depende do seu caso de uso. No meu caso, essa tarefa do Ansible funciona:

    - name: Restart services
      command: supervisorctl {{ item.1 }} {{ item.0 }}
      with_nested:
        - ['x', 'y', 'z']
        - ['stop', 'remove', 'add']

Perguntas postadas na edição duplicada nº 1264:

É um pouco uma continuação do #720 que está fechado, mas contém comentários de muitas pessoas confusas.

Meu problema

Preciso reiniciar o serviço X exatamente uma vez após a atualização do pacote. Ele contém o binário de serviço e uma parte da configuração do supervisor que é include -ed do arquivo principal.

Minhas tentativas

1. `supervisorctl update` does not restart service if configuration file did not change, old binary is still running.

2. `supervisorctl restart` restarts service with the old configuration, the new configuration is not used.

3. `supervisorctl reread && supervisorctl restart` does the same as the one above – and that is very surprising!

4. `supervisorctl update && supervisorctl restart` restarts service twice if configuration file changed.

Minha solução

supervisorctl reread

supervisorctl stop X
supervisorctl remove X
supervisorctl add X  # that also starts X as I have `autostart = true` in configuration

Isso funciona. Mas será que é realmente o melhor caminho?
E por que a tentativa 3 não funcionou?

Isso funciona. Mas será que é realmente o melhor caminho?

sim

E por que a tentativa 3 não funcionou?

O comando reread faz com que supervisord leia novamente o arquivo de configuração e tome conhecimento das alterações, mas não aplica nenhuma dessas alterações à configuração ativa. Os comandos remove e add são usados ​​para aplicar essas alterações à configuração ativa.

Esta página foi útil?
0 / 5 - 0 avaliações