"systemctl mask"와 "systemctl disable"의 차이점은 무엇입니까?


35

부팅 할 때 plymouth 서비스를 비활성화하여 Ubuntu GNOME 16.04의 부팅 시간을 개선하고 싶습니다. 다양한 웹 사이트에서 수행하는 방법에 대한 두 가지 답변을 찾았습니다.

# systemctl disable plymouth-quit-wait.service 
# systemctl mask plymouth-quit-wait.service 

그들이하는 일을 모른다면 위의 어느 것도 실행할 수 없습니다.


답변:


52

서비스가 enabled인 경우 어딘가에 심볼릭 링크가 있습니다

/etc/systemd/system

단위 파일에, 가장 자주 어딘가에

/lib/systemd/system

유용하게도 enable서비스를 수행하면 작성된 링크 및 대상의 전체 경로가 stdout에 인쇄됩니다.

서비스를 비활성화 하면 심볼릭 링크가 삭제되므로 장치 파일 자체는 영향을받지 않지만 systemd reads 인 경우 다음 부팅시 서비스가로드되지 않습니다 /etc/systemd/system.

그러나 비활성화 된 서비스 로드 수 있으며이 서비스에 의존하는 서비스가 시작 되면 시작됩니다 . enabledisable단지 구성 자동 시작 단위 행동 및 상태를 쉽게 무시됩니다.

마스크 서비스는 그 장치 파일에 대한 심볼릭 링크이다 /dev/null. 따라서 다른 활성화 된 서비스가 필요하더라도 서비스를로드하는 것이 "불가능"합니다.

mask서비스, 심볼릭 링크가에서 만든 /etc/systemd/system/dev/null다른 곳에서 그대로 원래의 유닛 파일을 떠나. 때 unmask심볼릭 링크를 삭제하는 서비스.

그러나 나는이 명령들이 항상 존경받는 것은 아님을 알았다.

대부분의 서비스를 마스킹하려고하면 실패합니다.

$ sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument

물론 서비스를 먼저 중단했습니다. @Anwar는 마스킹이 중요하지 않은 서비스에만 가능하다고 제안합니다.

직접 마스크하지 않으면 마스크 된 서비스를 마스크 해제해도 실패합니다 (자동). 나는 생각 에 심볼릭 링크의 형태를 제외하고, 서비스 어디서나에 대한 유닛 파일이 없기 때문에 이것이 /dev/null이 시간에, /lib/systemd/system:

$ file $(locate fuse.service)
/lib/systemd/system/fuse.service: symbolic link to /dev/null
$ sudo systemctl unmask fuse.service
$ systemctl status fuse
● fuse.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)

나는이 문제가있는 유일한 사람이 아닙니다

마스킹 된 서비스 x11-common을 실제로 마스크 해제하려면 /dev/null및에 대한 심볼릭 링크를 삭제해야했습니다 sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload. 이제 쿼리를 systemctl status x11-common하면 서비스에 멋진 녹색 원이 있고 단위 파일이 없지만로드되고 활성 (종료)됩니다.

자세한 내용은 Systemctl 사용 방법 에 대한이 기사를 참조 하십시오 .


1
systemctl status x11-common ● x11-common.service Loaded: masked (/dev/null; bad) Active: inactive (dead). 그게 나쁜가요? 하지만 우분투가 아니라 데비안에 있습니다. 어쨌든, 좋은 설명. 고맙습니다.
Faheem Mitha

@FaheemMitha 서비스가 필요한지 확실하지 않습니다. 내 시스템이없는 것 같습니다. 데비안에 대한 경험은 없지만, 죄송합니다!
Zanna

17

꽤 간단합니다.

  • systemctl start, systemctl stop: 해당 장치를 즉시 시작 (중지)합니다 .
  • systemctl enable, systemctl disable: 부팅시 자동 시작을 위해 장치를 표시 (표시 해제)합니다 ( [Install]섹션에 설명 된 장치 별 방식 ).
  • systemctl mask, systemctl unmask: 문제의 장치를 시작하려는 모든 시도 및 모든 시도를 수동으로 또는 기본 부팅 대상의 종속성을 포함하여 다른 장치의 종속성으로 허용하지 않습니다 (허용). systemd에서 자동 시작 표시는 기본 부팅 대상에서 해당 장치에 인공 종속성을 추가하여 구현되므로 "마스크"도 자동 시작을 허용하지 않습니다.

참조 : systemctl (1) .

더 : Lennart Poettering (2011-03-02). "세 가지 수준의 꺼짐" . 관리자 용 시스템 . 0pointer.de.



6

한마디로

  • disable부팅하는 동안 장치를 비활성화합니다. 그러나 부팅 후 언제든지 해당 장치를 시작할 수 있습니다.

  • mask장치를 완전히 비활성화합니다. 마스킹 해제 없이는 시작할 수 없습니다. 이는 부팅 중에 실패한다는 것을 자동으로 암시합니다.


나는 궁금 - 수행 mask하고 unmask당신을 위해 사용할 수 있습니까? (테스트하고 싶지 않다면 완전히 이해합니다!)
Zanna

1
@ 잔나 예. 작동합니다. 나는 전에 다시 테스트하기 전에 테스트했습니다. postgresql@9.5-main.service서비스 와 함께 .
Anwar

흠 나는 왜 그것이 효과가 없는지 알아 내야한다. 나는 내가 유일하지 않다는 것을 안다
Zanna

중요하지 않은 서비스에서 작동 할 수 있습니다. 여전히 새로운 생각입니다. btw, 당신의 대답은 더 유익했습니다. 도움이되었다
Anwar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.