(versão 229 do systemd, fwiw)
Eu tenho um serviço primário A e um serviço secundário B. O primário A pode ser executado sozinho. Mas o serviço B não pode rodar corretamente sozinho: ele precisa que A esteja rodando (tecnicamente B pode rodar, mas isto é o que eu quero que o systemd previna). Meu objetivo: Se A não está rodando, B não deve rodar. Dado que A e B estão rodando, quando A pára ou morre / trava, então B deve ser parado.
Como faço para isso?
Eu chego perto adicionando itens [Unit] ao b.service, usando
Requisite=A.service
After=A.service
O resultado do acima é que
1) B won't start unless A is running (good).
2) B is stopped when A is stopped (good).
3) However, if I kill A, service B continues to run (bad).
Como posso consertar este último comportamento # 3? Eu tentei usar o BindsTo em vez do Requisite, como este no arquivo de serviço do B:
BindsTo=A.service
After=A.service
e eu recebo:
1) If A is not running and I start B, then A is also started
(I want an error, I don't want A started)
2) B is stopped when A is stopped (good).
3) B is stopped when A is killed (good)
Então agora # 3 é bom, mas # 1 não é o comportamento desejado. Nem o PartOf nem o BindsTo parecem fazer o truque, mas talvez eu não tenha o encantamento certo de combinações de opções? Não está claro para mim nas páginas de manual quais opções podem ser combinadas.
Com o BindsTo, eu também tentei falhar na inicialização do B usando o ExecStartPre, mas é claro que isso não funcionou porque o início do B já havia determinado que precisava do A para rodar (e iniciar), antes de disparar B.
Existe alguma maneira de obter um comportamento entre o Requisite e o BindsTo? O 1-2-3 que listei acima?
Thanx antecipadamente!