O Systemd pode ser difícil de avaliar, mas isso parece ser uma boa experiência para tentar:
svc-init.service
[Unit]
[email protected]
Before
informa ao systemd que o svc-init precisa ser todo o caminho feito antes que qualquer serviço nomeado seja iniciado. Isso deve fornecer a sua ordem explícita completa.
svc @ .service
[Unit]
After=svc-init.service
BindsTo=svc-init.service
After
simula o Before
no svc- serviço init, e pode ser mais conveniente para você. Declará-lo em ambos os lugares não é um erro, nem é necessário. Isso apenas torna explícita sua intenção.
BindsTo
informa ao systemd que, se o serviço nomeado for interrompido por qualquer motivo, este também é. Usá-lo com uma declaração After
ou Before
garante que essa interrupção ocorra na ordem correta. Dependendo de suas necessidades, convém usar Requires
em vez de BindsTo
, pois Requires
indica que apenas pare este serviço quando o serviço nomeado for explicitamente interrompido. Se BindsTo
for usado, sempre que svc-init
for reiniciado, esse serviço também será reiniciado. Qualquer uma delas é uma versão mais strong da Wants
lista em seus exemplos.
Configurado assim, quando svc-init
iniciar a partir de um estado parado, ele aguardará para acionar qualquer svc
instâncias até que svc-init
termine a inicialização (Antes / Depois) e só o faça quando svc-init
terminar a inicialização com sucesso (BindsTo). Quando isso for feito, todas as instâncias de svc
serão iniciadas. Se svc-init
receber um comando stop , todas as instâncias de svc
serão interrompidas ao mesmo tempo que svc-init
(BindsTo). Se svc-init
receber um comando restart , o svc-init e todos os serviços dependentes serão parados e iniciados.
Se svc-init
se destinar a lançar e sair, você pode precisar de uma declaração SuccessExitStatus=
em sua seção Unit
para informar ao systemd quais códigos de saída são esperados em uma inicialização bem-sucedida.