Inicie e pare uma unidade do sistema com outro

5

Eu tenho dois serviços A.service e B.service. Eu quero que B seja interrompido quando A sai / é morto / é parado. Além disso, quero que B seja reiniciado quando A for reiniciado. Eu tentei a resposta dada em Como iniciar e interromper uma unidade do sistema com outro? e configure meus arquivos da seguinte forma: -

A. serviço

[Unit]
Description=A
Before=B.service
Requires=B.service
[Service]
ExecStart=/usr/share/A
ExecStopPost=/usr/evo/exit_handler.sh %p
Restart=always
StartLimitBurst=3
StartLimitInterval=300

B.serviço

[Unit]
Description=B
BindsTo=A.service

[Service]
Type=forking
ExecStart=/usr/share/B start
ExecStop=/usr/share/B stop
StartLimitBurst=5
StartLimitInterval=10
Restart=always

Quando eu mato A ou faço um systemctl reiniciar A, vejo que B é reiniciado. Mas quando A sai com status 0, não vejo B sendo reiniciado. Eu tenho habilitado systemd debug loggin e vejo que o estado de A muda para morto, mas não para reiniciar automaticamente

    
por Bug Killer 11.10.2016 / 03:06

1 resposta

3

Sua unidade B está usando BindsTo= , que é destinado a rastrear o estado de uma unidade que pode desaparecer .

O que você quer disso é PartOf= , onde esse serviço rastreará exatamente o status do serviço nomeado. Na documentação :

PartOf=
Configures dependencies similar to Requires=, but limited to stopping and restarting of units. When systemd stops or restarts the units listed here, the action is propagated to this unit. Note that this is a one-way dependency — changes to this unit do not affect the listed units.

Eu não acho que isso consertará todos seus problemas, no entanto. Eu suspeito que você não tenha considerado cuidadosamente as dependências reais entre seus dois serviços, e precisará pensar um pouco mais (e ser capaz de se expressar) antes de fazer com que essas unidades façam o que precisam fazer.

    
por 11.10.2016 / 04:02

Tags