When I run the command sudo systemctl list-unit-files
(I think the sudo is optional), I get output which shows all services and their state.
Here is a snippet from my machine:
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
...
I wonder why some services are in the "masked" state. I think this means, "this is better than 'disabling', because the service cannot be started, neither by hand or by systemd".
How can I get more information about the state of a service unit?
Who has put the units into their respective state?
I tried, for example,
sudo systemctl help dsmcad
- that only brings up the documentation = ...
line from the unit file. /etc/systemd/system/dsmcad.service
Note: Here I know exactly what dsmcad service is and what it does, I have installed it myself. I am more interested in a general solution.
mask
is a stronger version ofdisable
. Usingdisable
all symlinks of the specified unit file are removed. If usingmask
the units will be linked to/dev/null
. This will be displayed if you check e.g. bysystemctl status halt.service
. The advantage ofmask
is to prevent any kind of activation, even manual.Caution:
systemctl list-unit-files
is listing the state of the unit files (static, enabled, disabled, masked, indirect) and has nothing to do with the state of the service. To have a look at the services usesystemctl list-units
.hostname.service
is masked as redundant becausesystemd
sets the hostname (from /etc/hostname) very early on during startup.This setting is provided by the Debian systemd package.
Similarly, Debian can now run without a shell script to
halt
the system, it's handled by systemd-shutdown (source code here) instead.If a service has been masked manually, the mask will be installed in
/etc/systemd/system
instead.Services are also masked when they are removed on Debian/Ubuntu. I don't know why.
Since you are requesting information about the masked state, it is important to mention that it can be observed in a service that after started, had it definitions modified, reload (systemctl daemon-reload) and the new state is NOT ok. One easy example to understand it is the following scenario:
Hence, the masked state may be originated from a improper service definitions. Therefore, the user may induce unmasked state by editing improperly the service.
Observation: I'm not sure if it happens on purpose or it is a simple bug (default option), but it may be some interesting info to share
'mask' is a state of unit files which is considered as the "third level of off" (stop-1st, disable-2nd, mask-3rd). The services labeled as masked can neither be started manually (using the start command) nor by systems (at system boot). Therefore, use caution when employing the systemctl mask command on a service.