É possível fazer uma unidade systemd esperar até que todos os Conflitos = sejam interrompidos antes de tentar iniciar?

1

Eu tenho uma série de serviços systemd mutuamente exclusivos que são iniciados e interrompidos pelos usuários conforme necessário. Cada um dos serviços requer o uso exclusivo de algum hardware, portanto muitos dos serviços entram em conflito entre si. (Mas nem todos os serviços entram em conflito com todos os outros serviços)

Para gerenciar isso, usei o Conflicts =, que quase funciona perfeitamente, mas o ExecStart do serviço inicial parece ser executado enquanto o script ExecStop do serviço conflitante ainda está em execução, o que faz com que o serviço inicial falhe como recursos de hardware ainda não estão disponíveis.

Se eu tiver os scripts de início suspensos por um período de tempo seguro, como 30 segundos, eles funcionarão perfeitamente, mas prefiro que eles iniciem assim que o serviço conflitante parar.

After = não parece funcionar, pois os serviços podem ser interrompidos e iniciados repetidamente, em ordem arbitrária, e After = causa uma dependência cíclica.

Existe uma maneira de fazer isso no systemd sem recorrer a verificar se um conflito está sendo executado dentro dos scripts do ExecStart?

    
por millow 30.08.2018 / 17:28

1 resposta

0

Meu palpite é que o comando ExecStop= está emitindo uma operação assíncrona, como enviar um sinal de terminação para um processo e, em seguida, sair imediatamente antes de o processo terminar de ser encerrado.

Certifique-se de que seu comando ExecStop= seja uma operação síncrona que não saia até que o serviço seja completamente encerrado.

    
por 30.08.2018 / 18:18

Tags