Яка різниця між "systemctl маска" та "systemctl відключити"?


35

Я хочу покращити час завантаження мого Ubuntu GNOME 16.04, відключивши послуги plymouth при завантаженні. Я знайшов дві відповіді, як це зробити на різних веб-сайтах, а саме:

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

Я не можу виконати жодне з вищезазначених, якщо не знаю, що вони роблять.


4
Прочитайте тут fedoramagazine.org/systemd-masking-units
Rinzwind

Відповіді:


52

Якщо послуга є enabled, значить, десь знаходиться симпосилання

/etc/systemd/system

до одиничного файлу, найчастіше десь у

/lib/systemd/system

Корисно, коли ви надаєте enableпослугу, повний шлях створеного посилання та цілі буде надрукований до stdout.

Якщо вимкнути службу, видаляється симпосилання, тому сам файл одиниці не впливає, але служба не завантажується при наступному завантаженні, коли система читає /etc/systemd/system.

Однак служба з обмеженими можливостями може бути завантажена, і вона буде запущена, якщо послуга, яка залежить від неї, буде запущена ; enableі disableлише налаштувати поведінку автоматичного запуску для одиниць, і стан легко перекрити.

Маскується обслуговування один блок якого файл є символічним посиланням /dev/null. Це робить неможливим завантаження послуги, навіть якщо цього вимагає інша, включена служба.

Коли ви надаєте maskпослугу, символьне посилання створюється з /etc/systemd/systemдо /dev/null, залишаючи оригінальний файл одиниці в іншому місці недоторканим. Коли ви надаєте unmaskпослугу, символьне посилання видаляється.

Однак я помітив, що ці команди не завжди шануються.

Коли я намагаюся замаскувати більшість сервісів, це не вдається:

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

Звичайно, спочатку я припинив службу. @Anwar пропонує маскування можливе лише для некритичних служб.

Якщо розкрити послугу в масках, якщо я не маскував її, також не вдається (мовчки). Я вважаю, що це тому, що ніде не існує файлу одиниці для послуги, окрім як у вигляді символьного посилання на /dev/nullцей раз у /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)

Я не єдиний, хто має цю проблему

Щоб фактично розкрити маскуваний сервіс x11-common, мені довелося видалити симпосилання до /dev/nullта sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload. Тепер, коли я запитую його, systemctl status x11-commonя бачу, що сервіс має гарне зелене коло та завантажений та активний (вийшов), хоча у нього немає одиничного файлу.

Для подальшого ознайомлення ця стаття про те, як використовувати Systemctl, може бути корисною .


1
Хм, розумію systemctl status x11-common ● x11-common.service Loaded: masked (/dev/null; bad) Active: inactive (dead). Це погано? Але я на Debian, а не на Ubuntu. У всякому разі, приємне пояснення. Дякую.
Faheem Mitha

@FaheemMitha Я не впевнений, що служба потрібна - моя система, здається, працює без неї. Немає досвіду роботи з Debian, вибачте!
Zanna

17

Це досить просто.

  • systemctl start, systemctl stop: негайно запускає (зупиняє) відповідний блок ;
  • systemctl enable, systemctl disable: відмічає (відмічає) відмітку для автоматичного запуску під час завантаження (специфічним для одиниці способом, описаним у його [Install]розділі);
  • systemctl mask, systemctl unmask: забороняє (дозволяє) всі та будь-які спроби запустити відповідний блок (вручну або як залежність від будь-якої іншої одиниці, включаючи залежності цілі завантаження за замовчуванням). Зауважте, що маркування для автоматичного запуску в systemd реалізовано шляхом додавання штучної залежності від цілі завантаження за замовчуванням до відповідного блоку, тому "маска" також відключає автоматичну запуск.

Літ . : systemctl (1) .

Детальніше: Леннарт Поетеринг (2011-03-02). "Три рівні вимкнення" . systemd для адміністраторів . 0pointer.de.



6

Коротко,

  • disableробить прилад відключеним під час завантаження. Але цей блок можна запустити будь-коли після завантаження.

  • maskвимикає пристрій повністю. Його не можна запустити, не маскуючи. Це автоматично означає, що він не вийде під час завантаження.


Мені цікаво - робити maskі unmaskпрацювати для вас? (Я повністю розумію, якщо ви не хочете тестувати!)
Zanna

1
@Zanna так. Це працює. Я тестував, перш ніж знову перевірений. зі postgresql@9.5-main.serviceслужбою.
Анвар

Хм, я мушу розібратися, чому це не працює для мене. Я знаю, що я не єдина
Занна

Можливо, це працює для некритичних служб. Я думаю, що це все-таки нове. btw, ваша відповідь була більш інформативною. Це було корисно
Anwar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.