Prática recomendada para Wants= vs WantedBy= em arquivos de unidade Systemd

Prática recomendada para Wants= vs WantedBy= em arquivos de unidade Systemd

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.wantsdiretó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.servicee alpha.servicequando devo preferir WantedBy=alpha.serviceno beta.service?

Responder1

Funcionalmente

Wantsestá na Unitseção e WantedByestá no Install.

O processo init systemdnão processa/usa a Installseção. Em vez disso, um link simbólico deve ser criado no arquivo multi-user.target.wants. Normalmente, isso é feito pelo utilitário systemctlque lê a Installseçã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 Wantsbeta. Se o autor do beta conhece alfa, então beta é WantedByalfa.

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.confcom 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.

informação relacionada