“ systemctl掩码”和“ systemctl disable”之间有什么区别?


35

我想通过在启动时禁用普利茅斯服务来缩短Ubuntu GNOME 16.04的启动时间。我已经在各种网站上找到了两个答案,分别是:

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

除非我知道它们的作用,否则我无法执行以上任何一种方法。


Answers:


52

如果服务是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-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 startsystemctl stop:开始(停止)的单元中的问题立即 ;
  • systemctl enablesystemctl disable:标记(取消标记)要在引导时自动启动的单元(以特定于单元的方式,如本[Install]节所述);
  • systemctl masksystemctl unmask::禁止(允许)尝试启动有问题的单元(手动或作为任何其他单元的依赖项,包括默认引导目标的依赖项)。请注意,在systemd中标记为自动启动是通过将默认引导目标中的人为依赖项添加到相关单元来实现的,因此“掩码”也不允许自动启动。

参考:systemctl(1)

更多:Lennart Poettering(2011-03-02)。 “关闭的三个级别”systemd适用于管理员。0pointer.de。



6

简而言之,

  • disable使设备在引导过程中被禁用。但是该单元可以在启动后随时启动。

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


我很好奇-做maskunmask你的工作?(我完全理解您是否不想测试!)
Zanna

1
@Zanna是的。那行得通。我已经测试过,然后才再次测试。与postgresql@9.5-main.service服务。
安华

嗯,我得弄清楚为什么它对我不起作用。我知道我不是唯一的人
Zanna

可能适用于非关键服务。我认为它仍然是新的。顺便说一句,你的答案更有意义。这很有帮助
Anwar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.