Existem duas maneiras de encontrar isso:
ExecStopPost =/usr/bin/systemctl start A.service B.service
Additional commands that are executed after the service is stopped
Usar ExecStopPost
em vez de ExecStop
é importante porque quando ExecStop
é executado, o serviço ainda é considerado ativo, então o conflito ainda será aplicado.
Mas você diz especificamente que você não quer fazer dessa maneira, então eu vou fornecer uma alternativa, embora eu não recomende isso.
OnFailure =A.service B.service
A space-separated list of one or more units that are activated when this unit enters the "failed" state.
Se você puder garantir que C.service
entre em um estado de falha quando ele sair normalmente, isso iniciará os outros serviços. Infelizmente não há OnExit
ou similar. Você pode forçar o serviço a entrar em um estado com falha adicionando um ExecStart adicional .
If more than one command is specified, the commands are invoked sequentially in the order they appear in the unit file. If one of the commands fails (and is not prefixed with "-"), other lines are not executed, and the unit is considered failed.
ExecStart=[normal command]
ExecStart=/usr/bin/grep "fail" /dev/null
Obviamente, /dev/null
não corresponde a "fail" nunca, por isso você sempre obterá um grep
com falha. Apenas um exemplo de um comando que certamente falhará, provavelmente há "melhores".