Pelo que posso dizer pela documentação desistema, Wants=
e WantedBy=
executam a mesma função, exceto que o primeiro é colocado no arquivo da unidade dependente e vice-versa. (Isso WantedBy=
cria o unit.type.wants
diretório e o preenche com links simbólicos.)
DeDigitalOcean: Compreendendo unidades Systemd e arquivos de unidade:
A
WantedBy=
diretiva... permite que você especifique um relacionamento de dependência de maneira semelhante àWants=
diretiva na[Unit]
seção. A diferença é que esta diretiva está incluída na unidade auxiliar, permitindo que a unidade primária listada permaneça relativamente limpa.
Trata-se realmente apenas de manter um arquivo de unidade "limpo"? Qual é a melhor prática para usar essas duas diretivas? Ou seja, se o serviço alfa “quer” o serviço beta, quando devo usar Wants=beta.service
e alpha.service
quando devo preferir WantedBy=alpha.service
no beta.service
?
Responder1
Funcionalmente
Wants
está na Unit
seção e WantedBy
está no Install
.
O processo init systemd
não processa/usa a Install
seção. Em vez disso, um link simbólico deve ser criado no arquivo multi-user.target.wants
. Normalmente, isso é feito pelo utilitário systemctl
que lê a Install
seção.
Resumindo,WantedBy
é afetado por systemctl enable
/ systemctl disable
.
Logicamente
Considere qual dos serviços deveria “conhecer” ou estar “consciente” do outro. Por exemplo, um uso comum de WantedBy
:
[Install]
WantedBy=multi-user.target
Alternativamente, isso poderia estar em multi-user.target:
[Unit]
Wants=nginx.service
Mas essa segunda maneira não faz sentido. Logicamente, nginx.service conhece o multi-user.target definido pelo sistema, e não o contrário.
Portanto, no seu exemplo, se o autor do alfa conhece o beta, então o alfa Wants
beta. Se o autor do beta conhece alfa, então beta é WantedBy
alfa.
Para ajudá-lo a decidir, você pode considerar qual serviço pode ser instalado (digamos, de um gerenciador de pacotes) sem que o outro esteja presente.
Diretórios de configuração
Como outra ferramenta na sua caixa, saiba que os arquivos systemd também podem ser estendidos com diretórios de configuração: /etc/systemd/system/myservice.service.d/extension.conf
Isso permite adicionar dependências onde nenhum serviço foi originalmente criado para saber sobre o outro. Costumo usar isso com montagens, onde (por exemplo) nem o nginx nem a montagem precisam de conhecimento explícito um do outro, mas eu, como administrador do sistema, entendo a dependência. Então eu crio nginx.service.d/mymount.conf
com Wants=mnt-my.mount
.
Responder2
Eles não são funcionalmente idênticos. A Wants=
configuração (e os arquivos de link simbólico) é a dependência. A WantedBy=
configuração controla a criação/destruição de tal dependência quando um serviço é ativado/desativado.
Então não hámelhorprática. Hácorretoprática. Apenas um dos dois possui a funcionalidade correta para qualquer situação. Ou se pretende ter uma dependência persistente que sempre exista, ou se pretende ter uma dependência transitória que possa ser ativada e desativada com enable
/ disable
.