Qual é o procedimento adequado para atualizar um serviço intermediário no Ubuntu?

2

Digamos que eu tenha dois pacotes, A e B , que ofereçam um serviço cada, a e b .

b depende de a . Em outras palavras, se o serviço a estiver atualmente ativo (em execução), então eu posso iniciar e parar b sem problemas. No entanto, se a não estiver ativo, b não deverá ser iniciado, pelo menos não sem primeiro tentar iniciar a . Da mesma forma, se eu quiser interromper o a , espero que o b seja removido primeiro e, em seguida, a . Isso tudo funciona muito bem com systemd .

Eu apliquei uma correção no pacote A .

Qual é o comportamento adequado do pacote quando executo dpkg --install A ?

Parece bastante evidente que A não sabe nada de B . Então, se o script prerm de A for executado:

systemctl stop a

Isso levará b para baixo junto com ele.

Em seguida, a nova versão de A é instalada e, em postinst , reinicio a com:

systemctl start a

Esse é o procedimento esperado para atualizar um pacote como A ? Será que systemd de alguma forma sempre lembrará de reiniciar b automaticamente? E se eu tivesse mais dependências?

    
por Alexis Wilke 20.08.2016 / 02:08

1 resposta

4

No systemd, a operação systemctl restart tem um comportamento especial em comparação com um par de stop + start:

  • systemctl restart a - pare b, pare a, inicie a, inicie b (isto é, reinicia as unidades dependentes, tudo na ordem correta)
  • systemctl stop a && systemctl start a - parar b, parar a, iniciar a (isto é, não não lembra sobre as unidades dependentes)

Observe que isso só acontece quando o b.service tem Requires=a.service . Wants =, After = e Before = não ativam este comportamento especial (mas After=a.service é muito provavelmente necessário também para ordenar paragens e começar uns contra os outros).

Portanto, para que isso funcione, você provavelmente não precisará executar nada do script de pré-processamento de A e systemctl restart do script postrm de A se o primeiro argumento for upgrade e% normalsystemctl stop + systemctl start caso contrário. (Nota: Eu posso estar errado aqui - não um usuário / mantenedor do Debian),

    
por intelfx 20.08.2016 / 05:57