systemd
여러 개의 대상을 갖고 싶습니다 . TargetA
, TargetB
, 및 , 호출하여 TargetC
서비스 집합을 제어합니다 . 구성은 다음과 같습니다.Service01
Service7
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
권장 방법:
systemctl isolate
3개의 타겟을 각각 발사하는 데 사용됩니다 . 이는 "isolate 명령은 현재 사용 중인 그래픽 환경이나 터미널을 포함할 수 있는 새 장치에서 활성화되지 않은 프로세스를 즉시 중지합니다." 에 설명된 대로man systemctl
강력한 명령입니다 .multi-user.target
종속성으로 포함될 수 있습니다 .- 대상에서 시작한 첫 번째 서비스가 다른 대상이 활성화되어 있는지 확인하는 특수 서비스인지 확인하세요. 이렇게 하면 관리자가 사용자 정의 대상을 "격리"하는 대신 실수로 "실행"하는 것을 방지할 수 있습니다. 이를 사용하여
/bin/systemctl is-active your.target
"활성"을 반환하는지 빠르게 확인할 수 있습니다.