Parar o grupo de serviços somente quando um serviço no grupo não puder ser reiniciado

0

Estou tentando combinar um conjunto de microserivces em um único grupo controlado via systemd. Implementei isso com o serviço "oneshot" pai com dependências para serviços "worker":

test-group.service

[Unit]
Description="Group service"
[email protected] [email protected]
[email protected] [email protected] 

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true

[email protected]

[Unit]
Description="Worker service %i"
PartOf=test-group.service

[Service]
Type=simple
ExecStart=/opt/bin/run.sh %i
Restart=on-failure

O problema com essa abordagem é que, quando um serviço de trabalho é interrompido e reiniciado pelo systemd, todos os serviços do grupo também são reiniciados:

systemd[1]: Started "Worker service b".
systemd[1]: Started "Worker service a".
systemd[1]: Starting "Group service"...
systemd[1]: Started "Group service".
systemd[1]: [email protected]: Main process exited, code=killed, status=9/KILL
systemd[1]: [email protected]: Unit entered failed state.
systemd[1]: [email protected]: Failed with result 'signal'.
systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
systemd[1]: Stopped "Group service".
systemd[1]: Stopping "Group service"...
systemd[1]: Stopped "Worker  service a".
systemd[1]: Started "Worker service a".
systemd[1]: Stopping "Worker service b"...
systemd[1]: Stopped "Worker service b".
systemd[1]: Started "Worker service b".
systemd[1]: Starting "Group service"...
systemd[1]: Started "Group service".

É possível não reiniciar o grupo inteiro se um serviço inativo tiver que ser reiniciado, mas somente este serviço?

A única solução que vejo é substituir Requires por Wants no serviço pai e definir ExecStopPost entry nos serviços do trabalhador para encerrar explicitamente o grupo se o serviço inativo não puder ser reiniciado. Se esta é a maneira preferida, então é para consultar o systemd se o reinício do serviço está planejado?

    
por dewaffled 29.01.2018 / 13:07

0 respostas