동일한 대상으로 그룹화된 모든 유닛을 중지하는 방법을 알고 싶습니다.
내 설정은 다음과 같습니다. 다음 내용이 포함된 여러 장치 구성 파일이 있습니다.
[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)