83 votes

Quelle est la différence entre "systemctl mask" et "systemctl disable" ?

Je veux améliorer le temps de démarrage de mon Ubuntu GNOME 16.04 en désactivant les services plymouth au démarrage. J'ai trouvé deux réponses sur la façon de le faire sur différents sites Web, à savoir :

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

Je ne peux pas exécuter l'un ou l'autre des éléments ci-dessus si je ne sais pas ce qu'ils font.

111voto

Zanna Points 65764

Si un service est enabled alors il y a un lien symbolique quelque part dans

/etc/systemd/system

dans un fichier d'unité, le plus souvent quelque part dans

/lib/systemd/system

Heureusement, lorsque vous enable un service, les chemins complets du lien créé et de la cible seront imprimés sur stdout.

Désactivation de le service supprime le lien symbolique, de sorte que le fichier d'unité lui-même n'est pas affecté, mais le service n'est pas chargé au prochain démarrage, lorsque systemd lit /etc/systemd/system .

Cependant, un service handicapé peut sera chargé, et sera lancé si un service qui en dépend est démarré ; enable y disable ne configurent le comportement de démarrage automatique que pour les unités, et l'état est facilement modifiable.

A masqué est un service dont le fichier d'unité est un lien symbolique à /dev/null . Il est donc "impossible" de charger le service, même s'il est requis par un autre service activé.

Quand vous mask un service, un lien symbolique est créé à partir de /etc/systemd/system à /dev/null en laissant le fichier de l'unité originale intact ailleurs. Lorsque vous unmask un service, le lien symbolique est supprimé.

Cependant, j'ai remarqué que ces ordres ne sont pas toujours honorés.

Lorsque j'essaie de masquer la plupart des services, cela échoue :

$ sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument

Bien sûr, j'ai d'abord arrêté le service. @Anwar suggère que le masquage n'est possible que pour les services non critiques.

Démasquer un service masqué, à moins que je ne l'aie masqué moi-même, échoue également (silencieusement). I croire c'est parce qu'il n'y a pas de fichier d'unité pour le service, sauf sous la forme d'un lien symbolique à /dev/null cette fois dans /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)

Je ne suis pas le seul à avoir ce problème.

Pour démasquer le service masqué x11-common, j'ai dû supprimer le lien symbolique à /dev/null y sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload . Maintenant, lorsque je l'interroge avec systemctl status x11-common Je vois que le service a un joli cercle vert et qu'il est chargé et actif (exité) bien qu'il n'ait pas de fichier d'unité.

Pour plus d'informations, voir cet article sur Comment utiliser Systemctl peut être d'une certaine utilité.

36voto

goroncy Points 344

C'est assez simple.

  • systemctl start , systemctl stop : démarre (arrête) l'unité en question immédiatement ;
  • systemctl enable , systemctl disable : marque (désigne) l'unité pour démarrage automatique au moment du démarrage (de manière spécifique à l'unité, décrite dans son [Install] section) ;
  • systemctl mask , systemctl unmask Le marquage pour le démarrage automatique : désapprouve (autorise) toutes les tentatives de démarrage de l'unité en question (que ce soit manuellement ou en tant que dépendance de toute autre unité, y compris les dépendances de la cible de démarrage par défaut). Notez que le marquage pour le démarrage automatique dans systemd est implémenté en ajoutant une dépendance artificielle de la cible de démarrage par défaut à l'unité en question, donc "mask" interdit également le démarrage automatique.

Réf : systemctl(1) .

Plus : Lennart Poettering (2011-03-02). "Les trois niveaux d'off" . systemd pour les administrateurs . 0pointer.de.

13voto

Anwar Points 72431

En bref,

  • disable rend l'unité désactivée pendant le démarrage. Mais cette unité peut être démarrée à tout moment après le démarrage.

  • mask désactive complètement l'unité. Elle ne peut pas être démarrée sans être démasquée. Cela implique automatiquement qu'elle échouera au démarrage.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X