为什么某些系统服务处于“屏蔽”状态?


42

当我运行命令时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  
getty@.service                             enabled 
gpsd.service                               indirect
gpsdctl@.service                           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服务是什么以及它是做什么的,我已经自己安装了它。我对一般解决方案更感兴趣。

Answers:


47

mask是的更强版本disable。使用disable指定单位文件的所有符号链接都将被删除。如果使用mask单位将链接到/dev/null。如果您通过进行检查,将显示此信息systemctl status halt.service。的优点mask是可以防止任何形式的激活,甚至是手动激活。

注意:systemctl list-unit-files列出了单元文件的状态(静态,启用,禁用,屏蔽,间接),与服务状态无关。看一下服务使用情况systemctl list-units


7
如果需要,还请说明如何删除屏蔽状态。
erikbwork

19
maskunmask可以与使用的命令systemctl。所以做吧systemctl unmask name_of_service.service
Kellerspeicher

这样做systemctl unmask name_of_service.service完全从中删除了我的服务定义文件/etc/systemd/system/,因此现在我需要再次将其重新添加。如果它再次被掩盖,我会陷入困境
Eldamir

1
嗨,Eldamir,/etc/systemd/system仅仅是服务的象征性链接。您应该添加*.service文件,/lib/systemd/system从那里将被链接到/etc/systemd/systemenable的服务。mask正在创建链接/dev/nullunmask从中删除该链接/etc/systemd/system,显然,如果有人在其中放置文件,则没有任何区别。
Kellerspeicher

3

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现在可以在没有外壳脚本的情况下运行到halt系统,而是由systemd-shutdown此处的源代码)处理。

如果服务已被手动屏蔽,则将安装该屏蔽/etc/systemd/system

在Debian / Ubuntu上删除服务时,服务也会被屏蔽。我不知道为什么


0

由于您正在请求有关屏蔽状态的信息,因此必须提及的是,可以在服务中观察到它,在启动后,如果对其定义进行了修改,重新加载(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

因此,被屏蔽的状态可能源自不正确的服务定义。因此,用户可能通过不正确地编辑服务来诱发未屏蔽状态。

观察:我不确定它是有意发生还是一个简单的错误(默认选项),但可能是一些有趣的信息可供分享

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.