Answers:
如果服务是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的本文可能会有所帮助。
systemctl status x11-common ● x11-common.service Loaded: masked (/dev/null; bad) Active: inactive (dead)
。那不好吗?但是我使用的是Debian,而不是Ubuntu。无论如何,很好的解释。谢谢。
这很简单。
systemctl start
,systemctl stop
:开始(停止)的单元中的问题立即 ;systemctl enable
,systemctl disable
:标记(取消标记)要在引导时自动启动的单元(以特定于单元的方式,如本[Install]
节所述);systemctl mask
,systemctl unmask
::禁止(允许)尝试启动有问题的单元(手动或作为任何其他单元的依赖项,包括默认引导目标的依赖项)。请注意,在systemd中标记为自动启动是通过将默认引导目标中的人为依赖项添加到相关单元来实现的,因此“掩码”也不允许自动启动。参考:systemctl(1) 。
更多:Lennart Poettering(2011-03-02)。 “关闭的三个级别”。 systemd适用于管理员。0pointer.de。