Каково различие между “systemctl маска”, и “systemctl отключают”?

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

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

Я не могу выполнить ни одно из вышеупомянутого, если я не знаю то, что они делают.

35
задан 24 August 2016 в 13:02

3 ответа

Если сервис enabled, затем существует символьная ссылка где-нибудь в

/etc/systemd/system

в файл единицы, чаще всего где-нибудь в

/lib/systemd/system

Услужливо, когда Вы enable сервис, полные пути созданной ссылки и цели будут распечатаны к stdout.

Отключение сервиса удаляет символьную ссылку, таким образом, сам файл единицы не затронут, но сервис не загружается при следующей начальной загрузке, когда systemd читает /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-распространенного сервиса маскированного я должен был удалить символьную ссылку на /dev/null и sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload. Теперь, когда я запрашиваю его с systemctl status x11-common Я вижу, что сервис имеет хороший зеленый круг и загружается и активен (вышедший), хотя он не имеет никакого файла единицы.

Для дальнейшей ссылки эта статья о том, Как Использовать Systemctl, может быть несколько полезной.

52
ответ дан 23 November 2019 в 00:22

Короче говоря,

  • disable делает единицу отключенной во время начальной загрузки. Но та единица может быть запущена в любое время после начальной загрузки.

  • mask отключает единицу полностью. Это не может быть запущено без размаскирования. Это автоматически подразумевает, что перестанет работать во время начальной загрузки.

6
ответ дан 23 November 2019 в 00:22

Это довольно просто.

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

Касательно: systemctl (1).

Еще: Lennart Poettering (2011-03-02). "Три Уровня Прочь". systemd для Администраторов. 0pointer.de.

17
ответ дан 23 November 2019 в 00:22

Другие вопросы по тегам:

Похожие вопросы: