Se um serviço for enabled
, haverá um link simbólico em algum lugar
/etc/systemd/system
para um arquivo de unidade, na maioria das vezes em algum lugar
/lib/systemd/system
Com ajuda, quando você enable
um serviço, os caminhos completos do link e do destino criados serão impressos no stdout.
Desativando o serviço exclui o symlink, então o arquivo da unidade em si não é afetado, mas o serviço não é carregado na próxima inicialização, quando o systemd lê /etc/systemd/system
.
No entanto, um serviço desativado pode ser carregado e será iniciado se um serviço que depende dele for iniciado ; enable
e disable
apenas configuram o comportamento de início automático para unidades e o estado é facilmente substituído.
Um serviço mascarado é aquele cujo arquivo de unidade é um link simbólico para /dev/null
. Isso torna "impossível" carregar o serviço, mesmo que seja exigido por outro serviço ativado.
Quando você mask
um serviço, um link simbólico é criado de /etc/systemd/system
para /dev/null
, deixando o arquivo da unidade original em outro lugar intocado. Quando você usa unmask
um serviço, o link simbólico é deletado.
No entanto, notei que esses comandos nem sempre são honrados.
Quando tento mascarar a maioria dos serviços, ele falha:
$ sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument
Claro, parei o serviço primeiro. @Anwar sugere que o mascaramento só é possível para serviços não críticos.
Desvendar um serviço mascarado, a menos que eu mesmo o mascarei, também falha (silenciosamente). Eu acredito que isso é porque não há arquivo de unidade para o serviço em qualquer lugar, exceto na forma de um link simbólico para /dev/null
, desta vez em /lib/systemd/system
:
$ file $(locate fuse.service)
/lib/systemd/system/fuse.service: symbolic link to /dev/null
$ sudo systemctl unmask fuse.service
$ systemctl status fuse
● fuse.service
Loaded: masked (/dev/null; bad)
Active: inactive (dead)
Eu não sou o único com este problema
Para realmente desmascarar o serviço mascarado x11-common, tive que excluir o symlink para /dev/null
e sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload
. Agora, quando eu consultar com systemctl status x11-common
vejo o serviço tem um círculo verde agradável e é carregado e ativo (saiu), embora não tenha arquivo de unidade.
Para referência futura, consulte este artigo em Como usar o Systemctl pode ser de alguma utilidade.