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