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?

Magnus
fonte

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.)

Tom Hunt
fonte
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.

Benny Jobigan
fonte
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