Como gerenciar um serviço systemd que precisa de vários processos?

1

Eu tenho um site que requer vários processos para ser executado (python, nó, etc). Eu atualmente tenho um serviço systemd criado para que eu possa facilmente iniciar e parar esses processos. Eu criei um script de início que lança todos os processos que eu preciso como processos em segundo plano (anexando & ao final do comando).

Isso me impede de poder usar o recurso de reinicialização automática do systemd quando algo falha, já que todos os processos estão sendo iniciados sob um único script.

Uma solução potencial que posso imaginar seria criar um serviço para cada processo e, em seguida, vinculá-los todos juntos, criando um serviço mestre que Requires deles. Eu não sou um fã disso porque isso significa que eu preciso criar 4-5 serviços para cada ambiente deste site que eu quero rodar.

Existe alguma maneira de definir facilmente um serviço que inicie vários processos e monitore cada um deles individualmente?

    
por user2896976 11.04.2018 / 20:56

1 resposta

1

Crie vários serviços modelo , que são nomeados com um @ como este:

Usando modelos, você pode iniciar uma instância nomeada para cada website:

systemctl start [email protected] [email protected]
systemctl start [email protected] [email protected]

Em tais unidades de modelo, você pode usar %i para fazer referência ao nome da instância ("clientone" neste exemplo). Assim, a unidade "principal" (serviço ou destino) poderia ter:

[Unit]
Requires=pythonthingy@%i.service
...
[Service]
Environment="DOCROOT=/var/www/%i"

Se cada site precisar de vários parâmetros, você poderá carregá-los a partir de um arquivo:

[Service]
EnvironmentFile=/etc/someconfigdir/%i.conf

Se alguns sites precisarem de configurações de unidade não padrão em comparação com o restante, use as opções de depósito:

Modelos, drop-ins e expansões como% i são explicados em systemd.unit (5 ) .

    
por 11.04.2018 / 22:40