동일한 대상에 속한 모든 유닛을 차단하는 방법은 무엇입니까?

동일한 대상에 속한 모든 유닛을 차단하는 방법은 무엇입니까?

동일한 대상으로 그룹화된 모든 유닛을 중지하는 방법을 알고 싶습니다.

내 설정은 다음과 같습니다. 다음 내용이 포함된 여러 장치 구성 파일이 있습니다.

[Unit]
...

[Service]
...

[Install]
WantedBy=mycustom.target

내가 달릴 때

# systemctl start mycustom.target

"필수" 단위는 mycustom.target올바르게 시작됩니다. 이제 원하는 유닛도 모두 차단할 수 있게 되었으면 좋겠습니다 mycustom.target. 나는 시도했다:

# systemctl stop mycustom.target

그러나 이것은 효과가 없습니다. 동일한 대상이 (명시적으로) 원하는 모든 유닛을 중지하지 않고도 이 작업을 수행할 수 있는 방법이 있습니까?

답변1

지침을 사용하십시오 PartOf=.

종속성 구성은 Requires=와 유사하지만 장치를 중지하고 다시 시작하는 것으로 제한됩니다. systemd가 여기에 나열된 장치를 중지하거나 다시 시작하면 작업이 해당 장치에 전파됩니다. 이는 단방향 종속성입니다. 이 장치를 변경해도 나열된 장치에는 영향을 미치지 않습니다.

PartOf=mycustom.target

답변2

편집: PartOf=이 답변을 작성할 당시 존재하지 않는 지시문이 더 나은 솔루션입니다. 자세한 내용은 다른 답변을 참조하세요.

암시적 방법과 명시적 방법의 두 가지 방법이 있습니다.

첫 번째 방법——StopWhenUnneeded=

첫 번째 방법은 다음과 같습니다.StopWhenUnneeded=지시하다. 유닛에 이 기능이 있는 경우 StopWhenUnneeded=yes해당 유닛에 대한 활성 유닛이 더 이상 없으면 자동으로 중지됩니다. 그러므로:Wants=Requires=

  • 이러한 단위가 있는 경우에만WantedBy= 오직통과 mycustom.target;
  • 이러한 장치는 수동으로 시작할 수 없습니다( systemctl start myunit.service즉, 시작한 후 즉시 중지).

두 번째 방법 - 쉘 파이프라인

두 번째 방법은 systemctl show -p추출을 위한 간단한 쉘 파이프라인을 구성하는 것입니다 mycustom.target.

좀 더 구체적으로 systemctl show UNIT보여드리면모두셀의 속성을 KEY=VALUE로 표시하고 systemctl show -p PROPERTIES UNIT동일한 작업을 수행하여 표시되는 속성 집합을 제한합니다. 그래서:

systemctl stop -- $(systemctl show -p Wants mycustom.target | cut -d= -f2)

관련 정보