역방향 요구 사항 = 종속성/더 강한 충돌 = 시스템 단위 파일에 있음

역방향 요구 사항 = 종속성/더 강한 충돌 = 시스템 단위 파일에 있음

두 개의 시스템 장치 A와 B가 있는데 동시에 실행하면 안 됩니다. 둘 다 동일한 리소스에 대한 액세스를 제공하지만 방식이 다르며, 하나는 다른 것보다 덜 우아하게 "외부에서" 중지를 처리합니다.

이들 사이에 종속성을 지정하면 Conflicts=단위 중 하나를 시작하면 다른 단위가 중지됩니다. 나는 (한 방향으로) 다음과 같이 더 강한 관계를 선호합니다 Requsite=.

  • A가 이미 시작된 경우 B 시작은 실패합니다.
  • B가 이미 시작된 경우 A를 시작하면 B가 중지되고 A도 실패해야 합니다.

이를 수행할 수 있는 방법이 있습니까?

답변1

나는 결국 이렇게 했습니다:

존재하다 B.service:

[Service]
ExecStartPre=/bin/systemctl stop A.mount

존재하다 A.mount:

[Unit]
Requires=B-stopped.service
After=B-stopped.service

존재하다 B-stopped.service:

[Service]
Type=oneshot
ExecStart=/bin/sh -c '! systemctl --quiet is-active B'

관련 정보