Agrupando serviços do sistema


10

Eu escrevi cerca de meia dúzia de .servicearquivos para as diferentes partes que compõem o sistema no qual estou trabalhando. É útil poder iniciar o sistema inteiro aos poucos, mas eu também gostaria de ter uma única unidade que inicie o sistema inteiro em uma chamada para systemctl.

Qual é a melhor forma de fazer isso?

Respostas:


10

Você deseja uma unidade do tipo de destino , com todas as unidades de serviço listadas como Wants=dependências. Então você começa usando systemctl start unitname.target. (Certifique-se de não usar systemctl isolateaqui; isso encerrará tudo, exceto o que está na árvore de dependência dos seus serviços, o que você provavelmente não deseja.)


Como alternativa, você pode usar a WantedBychave na [Install]seção e anotar um destino já existente. Por exemplo, se você deseja que seus serviços sempre sejam inicializados antes que outros usuários possam efetuar login, use multi-user.target.
precisa saber é o seguinte

Sim, o tipo de destino com a Wants=listagem de todos os serviços parece suficiente para iniciar , no entanto, não consigo encontrar nenhuma maneira de fazer parar e reiniciar o trabalho usando um tipo de destino. Existe um tipo que permita isso?
Magnus

Magnus, você já encontrou uma boa solução para isso?
Sam Hendley

2
Sam, Magnus: Parece que interromper os serviços desejados de um .targetpode ser feito usando StopWhenUnneeded=yesem cada um dos .servicearquivos. superuser.com/questions/470153/…
jonnor

1
No meu caso particular, eu posso usar as ferramentas systemd que lidam com globbing :) Então, para iniciar, eu uso um .targete para parar, eu uso systemctl stop foo.\*(já que todos os serviços envolvidos têm arquivos de serviço começando com o wit foo.).
Magnus

2

Você já tentou usar PartOfas subunidades do grupo-alvo, além Wantsdo alvo? Ex: PartOf=foo.targetdentro foo-sub1.servicee Wants=foo-sub1.service foo-sub2.servicedentro foo.target. Eu apenas tentei isso e fui capaz de iniciar e parar todas as minhas subunidades apenas iniciando e parando o alvo.

PartOf =

Configura dependências semelhantes a Requer =, mas limitadas à parada e reinicialização de unidades. Quando systemd para ou reinicia as unidades listadas aqui, a ação é propagada para esta unidade. Observe que essa é uma dependência unidirecional - as alterações nesta unidade não afetam as unidades listadas.

Quando PartOf = b.service é usado em a.service, essa dependência será exibida como ConsistsOf = a.service na lista de propriedades de b.service. ConsistsOf = dependência não pode ser especificada diretamente.


Bem-vindo ao U&L! Se sua postagem não fornecer uma resposta para a pergunta, ela deverá ser postada na seção Comentário abaixo da pergunta.
Yurij Goncharuk 30/04/19

Isso fornece a outra metade da resposta de Tom Hunt - a capacidade de interromper um grupo inteiro de serviços.
Benny Jobigan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.