Eu tenho um site que requer a execução de vários processos (python, nó, etc). Atualmente, tenho um serviço systemd criado para poder iniciar e interromper facilmente esses processos. Criei um script inicial que inicia todos os processos necessários como processos em segundo plano (anexados &
ao final do comando).
Isso me impede de usar o recurso de reinicialização automática do systemd quando algo trava, já que todos os processos estão iniciando em um único script.
Uma solução potencial que posso imaginar seria criar um serviço para cada processo e, em seguida, vinculá-los todos criando um serviço mestre para Requires
eles. Não sou fã disso porque significa que preciso criar de 4 a 5 serviços para cada ambiente deste site que desejo executar.
Existe uma maneira de definir facilmente um serviço que inicia vários processos e monitora cada um deles individualmente?
Responder1
Crie váriosmodeloserviços, que são nomeados assim @
:
Usando modelos, você pode iniciar uma instância nomeada para cada site:
systemctl start [email protected] [email protected]
systemctl start [email protected] [email protected]
Dentro dessas unidades de modelo, você pode usar %i
para fazer referência ao nome da instância ("clientone" neste exemplo). Portanto a unidade “principal” (serviço ou alvo) 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 de um arquivo:
[Service]
EnvironmentFile=/etc/someconfigdir/%i.conf
Se alguns sites precisarem de configurações de unidade fora do padrão em comparação com o restante, use drop-ins:
[email protected]
– o modelo comum[email protected]/overrides.conf
– parâmetros extras apenas para o cliente 1
Modelos, drop-ins e expansões como %i são explicados emunidade do sistema (5).