当我运行命令时sudo systemctl list-unit-files
(我认为 sudo 是可选的),我得到显示所有服务及其状态的输出。
以下是来自我的机器的一个片段:
UNIT FILE STATE
...
debian-fixup.service static
debug-shell.service disabled
display-manager.service enabled
dns-clean.service enabled
dsmcad.service enabled
emergency.service static
failsafe-x.service static
friendly-recovery.service masked
fuse.service masked
gdm.service masked
getty-static.service static
[email protected] enabled
gpsd.service indirect
[email protected] static
gpu-manager.service enabled
halt-local.service static
halt.service masked
hostname.service masked
...
我想知道为什么有些服务处于“屏蔽”状态。我认为这意味着“这比‘禁用’更好,因为该服务无法启动,无论是手动启动还是通过 systemd 启动”。
如何获取有关服务单元状态的更多信息?
谁将这些单位置于其各自的状态?
例如,我尝试过
sudo systemctl help dsmcad
- 这只会显示documentation = ...
来自单元文件的那一行。/etc/systemd/system/dsmcad.service
注意:在这里我知道确切地dsmcad 服务是什么以及它有什么用,我自己已经安装了它。我对通用解决方案更感兴趣。
答案1
mask
是 的增强版本disable
。使用disable
会删除指定单元文件的所有符号链接。如果使用 ,mask
单元将链接到/dev/null
。如果您检查 ,例如通过 ,则会显示这一点systemctl status halt.service
。 的优点mask
是可以防止任何类型的激活,即使是手动的。
注意:systemctl list-unit-files
正在列出单位的状态文件(静态、启用、禁用、屏蔽、间接),与服务状态无关。要查看服务使用systemctl list-units
。
答案2
'mask' 是单元文件的状态,被视为“第三级关闭”(stop-1st、disable-2nd、mask-3rd)。标记为 masked 的服务既不能手动启动(使用 start 命令),也不能由系统启动(在系统启动时)。因此,在服务上使用 systemctl mask 命令时要小心。
答案3
由于您请求的是有关屏蔽状态的信息,因此需要指出的是,可以在启动后的服务中观察到该信息,该服务已修改其定义,重新加载(systemctl daemon-reload)并且新状态不好一个容易理解的例子是以下场景:
a) the service is running well (already started)
b) edit the service definition file and delete everything in its contents
c) reload
d) state masked will be observed too
因此,屏蔽状态可能源自不正确的服务定义。因此,用户可能通过不正确的编辑服务而导致未屏蔽状态。
观察:我不确定这是故意发生的还是一个简单的错误(默认选项),但它可能是一些值得分享的有趣信息
答案4
hostname.service
被掩盖为多余的,因为systemd
在启动期间很早就设置了主机名(来自 /etc/hostname)。
此设置由 Debian systemd 包提供。
$ ls -l /lib/systemd/system/hostname.service
lrwxrwxrwx 1 root root 9 Apr 8 22:47 /lib/systemd/system/hostname.service -> /dev/null
$ dpkg-query --search /lib/systemd/system/hostname.service
systemd: /lib/systemd/system/hostname.service
类似地,Debian 现在可以在没有 shell 脚本的halt
情况下运行,它由systemd 关闭(源代码这里) 反而。
如果某项服务已被手动屏蔽,则会安装该屏蔽/etc/systemd/system
。
在 Debian/Ubuntu 上删除服务时也会被屏蔽。我不知道为什么。