“systemctl mask”和“systemctl disable”有什么区别?

van*_*tch 72 boot plymouth systemd

我想通过在启动时禁用 plymouth 服务来改善我的 Ubuntu GNOME 16.04 的启动时间。我在各种网站上找到了两个关于如何做到这一点的答案:

# systemctl disable plymouth-quit-wait.service 
# systemctl mask plymouth-quit-wait.service 
Run Code Online (Sandbox Code Playgroud)

除非我知道他们在做什么,否则我无法执行上述任何一项。

Zan*_*nna 99

如果服务是enabled,则在某处有一个符号链接

/etc/systemd/system
Run Code Online (Sandbox Code Playgroud)

到一个单元文件,通常在某个地方

/lib/systemd/system
Run Code Online (Sandbox Code Playgroud)

有用的是,当你 enable提供服务时,创建的链接和目标的完整路径将打印到标准输出。

禁用该服务会删除符号链接,因此单元文件本身不受影响,但该服务不会在下次启动时加载,当 systemd 读取/etc/systemd/system.

但是,禁用的服务可以加载,如果依赖它的服务启动它将被启动enabledisable只为单元配置自动启动行为,并且状态很容易被覆盖。

一个蒙面的服务是其单位的文件是一个符号链接/dev/null。这使得加载服务“不可能”,即使另一个已启用的服务需要它。

当您mask提供服务时,会从/etc/systemd/systemto创建一个符号链接/dev/null,而其他地方的原始单元文件则保持不变。当您unmask提供服务时,符号链接将被删除。

但是,我注意到这些命令并不总是受到尊重。

当我尝试屏蔽大多数服务时,它失败了:

$ sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument
Run Code Online (Sandbox Code Playgroud)

当然,我先停止了服务。@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)
Run Code Online (Sandbox Code Playgroud)

我不是唯一有这个问题的人

为了真正揭开被屏蔽的服务 x11-common,我不得不删除到/dev/null和的符号链接sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload。现在当我用systemctl status x11-common我看到该服务有一个漂亮的绿色圆圈,并且已加载并处于活动状态(退出),尽管它没有单元文件。

为了进一步参考这篇关于如何使用 Systemctl 的文章可能会有一些用处。


int*_*lfx 30

这很简单。

  • systemctl startsystemctl stop:开始(停止)的单元中的问题立即;
  • systemctl enable, systemctl disable: 标记(取消标记)启动时自动启动的单元(以特定于单元的方式,在其[Install]部分中描述);
  • systemctl mask, systemctl unmask: 禁止(允许)所有和任何尝试启动有问题的单元(手动或作为任何其他单元的依赖项,包括默认引导目标的依赖项)。请注意,systemd 中的自动启动标记是通过从默认引导目标添加到相关单元的人工依赖项来实现的,因此“掩码”也不允许自动启动。

参考:systemctl(1)

更多:Lennart Poettering (2011-03-02)。 “三关”systemd 为管理员。0pointer.de。


Anw*_*war 12

简而言之,

  • disable使设备在启动期间禁用。但是该单元可以在启动后随时启动。

  • mask完全禁用本机。不取消屏蔽就无法启动。这自动意味着它将在启动期间失败。