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
[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?
Tags dependencies services systemd