Como parar todas as unidades pertencentes ao mesmo alvo?

7

Gostaria de saber como parar todas as unidades agrupadas pelo mesmo destino.

Minha configuração é a seguinte. Eu tenho vários arquivos de configuração de unidade que lêem:

[Unit]
...

[Service]
...

[Install]
WantedBy=mycustom.target

Quando eu corro

# systemctl start mycustom.target

As unidades que "são desejadas por" mycustom.target são iniciadas corretamente. Agora, eu também gostaria de poder parar todas as unidades que são desejadas por mycustom.target . Eu tentei:

# systemctl stop mycustom.target

Isso não faz nada. Existe uma maneira de fazer isso funcionar sem ter que parar todas as unidades que são (explicitamente) desejadas pelo mesmo alvo?

    
por Kris 26.06.2015 / 18:00

2 respostas

6

Existem duas maneiras: uma implícita e uma explícita.

Primeira maneira - StopWhenUnneeded=

A primeira maneira é usar a diretiva StopWhenUnneeded= . Se uma unidade tiver StopWhenUnneeded=yes , ela será automaticamente interrompida quando não houver nenhuma unidade ativa que Wants= / Requires= da unidade em questão. Por isso:

  • isso só funcionará se essas unidades forem WantedBy= somente por mycustom.target ;
  • você não poderá iniciar nenhuma dessas unidades manualmente (isto é, systemctl start myunit.service irá iniciá-lo e pará-lo imediatamente depois).

Segunda via - um pipeline de shell

A segunda maneira é construir um pipeline de shell simples, usando systemctl show -p para extrair a lista de dependências de mycustom.target .

Mais especificamente, systemctl show UNIT mostrará todas as propriedades de uma unidade em um formulário KEY = VALUE e systemctl show -p PROPERTIES UNIT fará o mesmo, limitando o conjunto de propriedades mostradas. Então:

systemctl stop -- $(systemctl show -p Wants mycustom.target | cut -d= -f2)
    
por 29.06.2015 / 16:09
18

Use a diretiva 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.

PartOf=mycustom.target

    
por 29.03.2016 / 16:41

Tags