Почему некоторые системные службы в состоянии «маскировки»?

23

Когда я запускаю команду 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 и что она делает, я сам ее установил. Меня больше интересует общее решение.

    
задан knb 17.12.2015 в 08:42
источник

2 ответа

27

mask - более сильная версия disable . Используя disable , все символические ссылки указанного файла блока удаляются. При использовании mask единицы будут привязаны к /dev/null . Это будет отображаться, если вы проверите, например. systemctl status halt.service . Преимущество mask состоит в том, чтобы предотвратить любую активацию, даже ручную.

Предостережение: systemctl list-unit-files перечисляет состояние единицы файлов (статические, включенные, отключенные, скрытые, косвенные) и не имеет ничего общего с состоянием службы. Чтобы посмотреть службы , используйте systemctl list-units .

    
ответ дан Kellerspeicher 09.02.2016 в 16:12
источник
2

hostname.service маскируется как избыточное, потому что systemd очень быстро устанавливает имя хоста (из / etc / hostname) во время запуска.

Этот параметр предоставляется пакетом systemd Debian.

$ 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 . Я не знаю, почему.

    
ответ дан sourcejedi 07.06.2017 в 14:57