Como podemos mascarar o serviço cujo arquivo de unidade está localizado em / etc / systemd / system?

4

Eu criei um serviço de teste em / etc / systemd / system, que é o caminho correto para criar arquivos de unidade personalizados.

[root@apollo system]# cat sample.service
[Unit]
Description=This is my test service
Wants=chronyd.service
After=chronyd.service

[Service]
Type=forking
ExecStart=/root/sample.sh

[Install]
WantedBy=multiuser.target chronyd.service
#RequiredBy=multiuser.target chronyd.service
#Alias=xyz
[root@apollo system]# pwd
/etc/systemd/system
[root@apollo system]#

Eu me certifiquei de que systemd estava ciente executando "systemctl daemon-reload". Eu também fui capaz de parar / iniciar o serviço.

Quando tentei mascarar, isso me mostra este erro:

[root@apollo system]# systemctl mask sample.service
Failed to execute operation: File exists
[root@apollo system]#

Isso porque o systemd está tentando criar um symlink usando este comando:

ln -s /dev/null /etc/systemd/system/sample.service

Como o sample.service já existe dentro de / etc / systemd / system, o comando falhará a menos que o systemd use "ln -fs".

Então, significando que não podemos mascarar qualquer arquivo de unidade que criamos em / etc / systemd / system?

Eu tentei mover sample.service para / usr / lib / systemd / system e consegui mascará-lo porque ele foi capaz de criar um link simbólico em / etc / systemd / system sem qualquer impedimento.

Alguém já experimentou isso? Você acha que isso é um bug?

    
por mit13 15.03.2017 / 19:29

1 resposta

3

Não existe uma maneira de mascarar os serviços que possuem arquivos de serviço em /etc/systemd/system sem primeiro remover o arquivo de lá. Isso é design intencional.

Você pode desativar o serviço usando systemctl disable servicename.service , o que terá o mesmo efeito que mascará-lo em muitos casos.

A postagem do autor do Três Níveis de Desativação do systemd tem mais detalhes sobre as diferenças entre stop , disable e mask no systemd.

    
por 15.03.2017 / 21:18

Tags