Jaka jest różnica między „maską systemctl” a „wyłączeniem systemctl”?

35

Chcę poprawić czas uruchamiania mojego Ubuntu GNOME 16.04, wyłączając usługi Plymouth podczas uruchamiania. Znalazłem dwie odpowiedzi, jak to zrobić na różnych stronach internetowych:

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

Nie mogę wykonać żadnej z powyższych czynności, chyba że wiem, co oni robią.

pearlstar
źródło
4
Przeczytaj tutaj fedoramagazine.org/systemd-masking-units
Rinzwind

Odpowiedzi:

52

Jeśli usługa jest enabled, to gdzieś jest dowiązanie symboliczne

/etc/systemd/system

do pliku jednostkowego, najczęściej gdzieś w

/lib/systemd/system

Pomocnie, gdy jesteś enableusługą, pełne ścieżki utworzonego łącza i celu zostaną wydrukowane na standardowe wyjście.

Wyłączenie usługi usuwa dowiązanie symboliczne, więc nie wpływa to na sam plik jednostki, ale usługa nie jest ładowana przy następnym uruchomieniu, gdy systemd czyta /etc/systemd/system.

Można jednak załadować usługę wyłączoną i zostanie ona uruchomiona, jeśli uruchomiona zostanie usługa zależna od niej ; enablei disablekonfiguruj tylko automatyczne uruchamianie dla jednostek, a stan można łatwo zastąpić.

Zamaskowany usługa jest jeden plik, którego jednostka jest dowiązaniem do /dev/null. To sprawia, że ​​„niemożliwe” jest załadowanie usługi, nawet jeśli jest to wymagane przez inną, włączoną usługę.

Kiedy jesteś maskusługą, tworzony jest dowiązanie symboliczne od /etc/systemd/systemdo /dev/null, pozostawiając oryginalny plik jednostki gdzie indziej niezmieniony. W unmaskprzypadku usługi dowiązanie symboliczne jest usuwane.

Zauważyłem jednak, że te polecenia nie zawsze są honorowane.

Gdy próbuję zamaskować większość usług, nie udaje się:

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

Oczywiście najpierw zatrzymałem usługę. @Anwar sugeruje, że maskowanie jest możliwe tylko w przypadku usług niekrytycznych.

Demaskowanie zamaskowanej usługi, chyba że ją zamaskowałem, również kończy się niepowodzeniem (po cichu). Wierzę, że dzieje się tak, ponieważ nigdzie nie ma pliku jednostkowego dla usługi, z wyjątkiem postaci dowiązania symbolicznego /dev/null, tym razem w /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)

Nie tylko ja mam ten problem

Aby faktycznie zdemaskować zamaskowaną usługę x11-common, musiałem usunąć dowiązanie symboliczne do /dev/nulli sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload. Teraz, gdy pytam o to systemctl status x11-common, widzę, że usługa ma ładne zielone kółko i jest ładowana i aktywna (opuszczona), chociaż nie ma pliku jednostkowego.

Więcej informacji można znaleźć w tym artykule na temat korzystania z Systemctl .

Zanna
źródło
1
Hmm, rozumiem systemctl status x11-common ● x11-common.service Loaded: masked (/dev/null; bad) Active: inactive (dead). Czy to złe? Ale jestem na Debianie, nie Ubuntu. W każdym razie miłe wyjaśnienie. Dziękuję Ci.
Faheem Mitha
@FaheemMitha Nie jestem pewien, czy usługa jest potrzebna - wydaje się, że mój system działa bez niej. Niestety nie ma doświadczenia z Debianem!
Zanna,
17

To jest dość proste.

  • systemctl start, systemctl stop: natychmiast uruchamia (zatrzymuje) dane urządzenie ;
  • systemctl enable, systemctl disable: oznacza (odznacza) jednostkę do automatycznego uruchamiania w czasie uruchamiania (w sposób specyficzny dla jednostki, opisany w jej [Install]rozdziale);
  • systemctl mask, systemctl unmask: nie zezwala (zezwala) na wszelkie próby uruchomienia danej jednostki (ręcznie lub jako zależność dowolnej innej jednostki, w tym zależności od domyślnego celu rozruchowego). Zauważ, że znakowanie dla autostartu w systemd jest realizowane przez dodanie sztucznej zależności od domyślnego celu rozruchu do danej jednostki, więc „maska” również uniemożliwia autostart.

Ref .: systemctl (1) .

Więcej informacji: Lennart Poettering (2011-03-02). „Trzy poziomy wyłączenia” . systemd dla administratorów . 0pointer.de.

intelfx
źródło
Doskonały przegląd! Zobacz także Jak używać Systemctl do zarządzania usługami systemowymi i jednostkami .
Peter Mortensen
6

W skrócie,

  • disablepowoduje wyłączenie urządzenia podczas rozruchu. Ale to urządzenie można uruchomić w dowolnym momencie po uruchomieniu.

  • maskcałkowicie wyłącza urządzenie. Nie można go uruchomić bez demaskowania. To automatycznie oznacza, że ​​zawiedzie podczas uruchamiania.

Anwar
źródło
Jestem ciekaw - czy maski unmaskpraca dla Ciebie? (Całkowicie rozumiem, jeśli nie chcesz testować!)
Zanna
1
@Zanna tak. To działa. Testowałem przedtem jeszcze raz testowałem właśnie teraz. z [email protected]obsługą.
Anwar
Hmm, muszę się dowiedzieć, dlaczego to dla mnie nie działa. Wiem, że nie jestem jedyny
Zanna
Może to działać w przypadku usług niekrytycznych. Myślę, że wciąż jest nowy. btw, twoja odpowiedź była bardziej pouczająca. To było pomocne
Anwar