Qual é a diferença entre “systemctl mask” e “systemctl disable”?

12

Eu quero melhorar o tempo de inicialização do meu Ubuntu GNOME 16.04 desativando os serviços do plymouth ao inicializar. Eu encontrei duas respostas sobre como fazer isso em vários sites:

# systemctl disable plymouth-quit-wait.service 
# systemctl mask plymouth-quit-wait.service 

Não posso executar nenhum dos itens acima, a menos que eu saiba o que eles fazem.

    
por pearlstar 24.08.2016 / 17:08

3 respostas

23

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.

    
por Zanna 24.08.2016 / 21:05
6

Em suma,

  • disable torna a unidade desativada durante a inicialização. Mas essa unidade pode ser iniciada a qualquer momento após a inicialização.

  • mask desativa a unidade completamente. Não pode ser iniciado sem desmascarar. Isso automaticamente implica que irá falhar durante a inicialização.

por Anwar 24.08.2016 / 21:34
6

É bem simples.

  • systemctl start , systemctl stop : inicia (pára) a unidade em questão imediatamente ;
  • systemctl enable , systemctl disable : marca (desmarca) a unidade para inicialização automática no momento da inicialização (de uma maneira específica da unidade, descrita na seção [Install] );
  • systemctl mask , systemctl unmask : desativa (permite) todas e quaisquer tentativas de iniciar a unidade em questão (manualmente ou como uma dependência de qualquer outra unidade, incluindo as dependências do destino de inicialização padrão). Observe que a marcação para autostart no systemd é implementada adicionando uma dependência artificial do destino de inicialização padrão à unidade em questão, portanto, "mask" também não permite a inicialização automática.

Ref .: systemctl (1) .

Mais: Lennart Poettering (2011-03-02). "Os três níveis de folga" . systemd para administradores . 0pointer.de.

    
por intelfx 25.08.2016 / 05:25