Solicitando serviços com ativação de caminho e destino no systemd

1

Eu tenho um monte de serviços (digamos, S1, S2,... S10 ) que só devem começar depois que um serviço crítico C1 for inicializado. C1 grava um arquivo (digamos para /var/run/critical.init ) indicando que concluiu sua inicialização. Neste ponto, cada um dos serviços S1..S10 deve ser iniciado pelo systemd.

Ao tentar implementar o acima, usei a ativação baseada em .path do systemd e criei dois arquivos: um para o arquivo .path de S1 :

$ cat s1.path
[Path]
PathExists=/var/run/critical.init
Unit=s1.service

[Install]
WantedBy=multi-user.target


$ systemctl enable s1.path

e um arquivo que descreve o serviço em si:

$ cat s1.service
[Unit]
Description=Some service
After=syslog.target

[Service]
ExecStart=/usr/bin/s1
Type=simple
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Após a reinicialização, verifiquei que systemctl status s1 mostra que a unidade está ativa e S1 está não listado na saída de ps -ef (conforme esperado). Logo após criar o arquivo /var/run/critical.init manualmente, o systemd inicia a unidade s1 .

O experimento acima confirmou que a ativação baseada em caminho funciona para uma unidade. Eu gostaria de estender isso para todos os serviços S1...S10 .

A maneira óbvia é escrever um arquivo .path para cada serviço, mas estou procurando uma solução mais elegante.

Este problema pode ser resolvido usando um systemd target ? Se cada um dos serviços S1...S10 fizer parte de um novo critical.target em vez de multi-user.target , posso definir a dependência de /var/log/critical.init estar presente antes que qualquer uma das unidades em critical.target seja acionada? Quaisquer outras sugestões são bem-vindas também.

    
por linuxfan 20.12.2016 / 01:22

0 respostas

Tags