시스템 대상이 다른 대상의 서비스를 중지하도록 하려면 어떻게 해야 합니까?

시스템 대상이 다른 대상의 서비스를 중지하도록 하려면 어떻게 해야 합니까?

systemd여러 개의 대상을 갖고 싶습니다 . TargetA, TargetB, 및 , 호출하여 TargetC서비스 집합을 제어합니다 . 구성은 다음과 같습니다.Service01Service7

  • TargetA
    • Service1
    • Service2
    • Service3
  • TargetB~ 고 싶어요
    • Service3
    • Service4
    • Service5
  • TargetC~ 고 싶어요
    • Service5
    • Service6
    • Service7

표적:

  • 한 번에 하나의 대상만 활성화할 수 있습니다.
  • 시스템 관리자는 마음대로 수동으로 시작하고 서비스할 수 있어야 합니다.

내 초기 설정에는 다음이 포함됩니다.

  • 각 목표는 다른 두 목표와 충돌합니다.
  • 모든 서비스가 StopWhenUnneeded=true활성화 되었습니다.

이는 첫 번째 요구 사항을 충족합니다. 처음에는 두 개의 추가 목표가 차단되었습니다 TargetX. 불행하게도 이 설정은 시스템 관리자를 제한합니다. 시스템 관리자가 sudo systemctl start ServiceX서비스를 실행하면 서비스가 시작되었다가 필요하지 않기 때문에 즉시 종료됩니다.

두 번째 설정에는 다음이 포함됩니다.

  • 각 목표는 다른 두 목표와 충돌합니다.
  • 각 대상은 필요하지 않은 서비스와도 충돌합니다.
  • 이용 가능한 서비스가 없습니다.StopWhenUnneeded=true

예를 들어:

  • TargetA
    • ~ 고 싶어요
      • Service1
      • Service2
      • Service3
    • 갈등
      • Service4
      • Service5
      • Service6
      • Service7
      • TargetB
      • TargetC

이것은 원하는 효과를 얻지 못했습니다. 내가 실행하면 :

sudo systemctl start TargetA.target

다음은:

sudo systemctl start TargetB.target

그런 다음 TargetA.target중지되었지만(예!) Service1여전히 Service2실행 중입니다.

내가 무엇을 얻지 못했나요? systemd내가 원하는 행동을 어떻게 얻을 수 있나요 ?

답변1

권장 방법:

  1. systemctl isolate3개의 타겟을 각각 발사하는 데 사용됩니다 . 이는 "isolate 명령은 현재 사용 중인 그래픽 환경이나 터미널을 포함할 수 있는 새 장치에서 활성화되지 않은 프로세스를 즉시 중지합니다." 에 설명된 대로 man systemctl강력한 명령입니다 . multi-user.target종속성으로 포함될 수 있습니다 .
  2. 대상에서 시작한 첫 번째 서비스가 다른 대상이 활성화되어 있는지 확인하는 특수 서비스인지 확인하세요. 이렇게 하면 관리자가 사용자 정의 대상을 "격리"하는 대신 실수로 "실행"하는 것을 방지할 수 있습니다. 이를 사용하여 /bin/systemctl is-active your.target"활성"을 반환하는지 빠르게 확인할 수 있습니다.

관련 정보