일부 시스템 서비스가 "마스크"상태 인 이유는 무엇입니까?


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
...

일부 서비스가 "마스크"상태 인 이유가 궁금합니다. 나는 이것이 "손 으로든 체계적 으로든 서비스를 시작할 수 없기 때문에 이것이 '비활성화'보다 낫다"고 생각한다.

서비스 장치 상태에 대한 자세한 정보를 얻으려면 어떻게해야합니까?

누가 단위를 각자의 상태에 넣었습니까?

예를 들어, 단위 파일에서 줄을 sudo systemctl help dsmcad가져옵니다 documentation = ..../etc/systemd/system/dsmcad.service

참고 : 여기에 내가 아는 바로 , 내가 나 자신을 설치 한 어떤 서비스를에 dsmcad하고 무엇을하지 않습니다. 일반적인 솔루션에 더 관심이 있습니다.

답변:


47

mask의 더 강력한 버전입니다 disable. disable지정된 단위 파일의 모든 심볼릭 링크를 사용하면 제거됩니다. mask단위를 사용 하면에 연결됩니다 /dev/null. 예를 들어 by로 확인하면 표시됩니다 systemctl status halt.service. 장점은 mask모든 종류의 활성화, 심지어 수동을 방지하는 것입니다.

주의 : systemctl list-unit-files장치 파일 의 상태 (정적, 활성화, 비활성화, 마스크, 간접)를 나열하고 있으며 서비스 상태와 관련이 없습니다. 서비스 사용을 살펴 보려면 systemctl list-units.


7
원하는 경우 마스크 된 상태를 제거하는 방법도 설명하십시오.
erikbwork

19
와 함께 사용할 수 있는 maskunmask명령이 있습니다 systemctl. 그냥하세요 systemctl unmask name_of_service.service.
Kellerspeicher 2016 년

에서 systemctl unmask name_of_service.service서비스 정의 파일 을 완전히 제거 /etc/systemd/system/했으므로 이제 다시 다시 추가해야합니다. 다시 가려지면 루프에 빠질 것입니다
Eldamir

1
안녕하세요 Eldamir /etc/systemd/system는 서비스의 상징적 링크 일뿐입니다. 귀하는 추가해야합니다 *.service에 파일 /lib/systemd/system이 연결됩니다 곳에서 /etc/systemd/system당신이 경우 enable서비스. mask링크를 만들고이 링크를 제거 /dev/null하고 unmask있으며 /etc/systemd/system누군가 파일을 저장해도 아무런 차이가 없습니다.
Kellerspeicher 2016 년

3

hostname.servicesystemd시작 중에 호스트 이름 (/ etc / hostname에서)을 매우 일찍 설정 하므로 중복으로 마스크됩니다 .

이 설정은 데비안 시스템 패키지에서 제공합니다.

$ 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

마찬가지로, 데비안은 이제 halt시스템에 쉘 스크립트없이 실행할 수 있으며 , 대신 systemd-shutdown (source code here )에 의해 처리 됩니다.

서비스가 수동으로 마스킹 된 경우 /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

따라서, 마스킹 된 상태는 부적절한 서비스 정의로부터 시작될 수있다. 따라서, 사용자는 서비스를 부적절하게 편집함으로써 마스킹되지 않은 상태를 유도 할 수있다.

관찰 : 의도적으로 발생하는지 또는 간단한 버그 (기본 옵션)인지 확실하지 않지만 공유하기에 흥미로운 정보 일 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.