Organizando serviços / daemons com sistemas: executando mais de 100 daemons, agrupados por 3

2

Sou novo em systemd .

Eu tenho uma máquina que precisa executar um número substancial de daemons. Existem três tipos de daemons, chame-os de daemon-A , daemon-B , daemon-C .

Esses daemons sempre rodam em "grupos" de 3, com uma configuração específica para esses 3.

Ocasionalmente, seria necessário reiniciar ou interromper um grupo inteiro.

Qual é a melhor maneira de explicar isso para systemd ?

Meu conhecimento atual me faria simplesmente criar um novo arquivo .service para cada daemon-A , daemon-B , daemon-C , para cada configuração. Estou um pouco perdido quando se trata de cgroups e slices, em que eu meio que entendo o que eles fazem, mas um caso de uso prático ainda está um pouco além de mim.

Eu precisaria poder verificar um grupo em particular de uma maneira simples.

Este é o caminho a percorrer? Há algo de errado em ter um número tão grande de serviços gerenciados systemd ?

    
por maligree 09.02.2015 / 16:04

1 resposta

2

O systemd na verdade tem várias opções de configuração da unidade que você pode usar para expressar as dependências entre esses serviços.

Em particular, você desejará ver Requires= , Before= , After= , BindsTo= e PartOf= , os quais especificam diferentes maneiras pelas quais uma unidade pode ser iniciada ou interrompida em relação a outras unidades. Existem vários outros menos usados, então leia atentamente a documentação caso seus daemons possam usá-los.

(porque você não disse exatamente quais são as dependências entre seus serviços, não posso recomendar qual opção você deve usar.)

Além disso, o systemd pode ter unidades instanciadas , que iniciam o mesmo serviço, mas com uma configuração diferente. Uma unidade instanciada tem um nome terminando com @ , e a instância é o nome que segue o @ . No arquivo de unidade, %I e %i são substituídos pelo nome da instância, que você pode usar para carregar arquivos de configuração específicos. Por exemplo, em uma unidade instanciada [email protected] , você pode especificar:

ExecStart=/usr/bin/foo --daemon --config=/etc/foo/%i.conf

Em seguida, para ativar o foo service em uma instância bar , você diria:

systemctl enable foo@bar

O que fará com que o serviço foo comece com /etc/foo/bar.conf.

Note também que você pode especificar instâncias nos requisitos também. Por exemplo, se [email protected] exigir [email protected] do mesmo nome de instância, você poderá dizer em [email protected] :

Requires=b@%i.service
    
por 09.02.2015 / 16:55

Tags