모듈 간의 시스템 종속성은 대칭이어야 합니까?

모듈 간의 시스템 종속성은 대칭이어야 합니까?

A와 B라는 두 개의 모듈이 있다고 가정해 보겠습니다. B보다 먼저 A를 시작하고 싶습니다.

  1. 하나의 구성 파일이면 충분합니까?
[Unit]
Before=B
  1. B 구성 파일만으로 충분합니까?
[Unit]
Requires=A
After=A
  1. 아니면 두 파일 모두에서 종속성을 대칭적으로 정의해야 할까요?

구성 A

[Unit]
Before=B

구성 B

[Unit]
Requires=A
After=A

권장사항과 최소 사례는 무엇입니까?

답변1

예, 하나면 충분합니다(양쪽 모두).

당신이 수년 동안 모듈 B를 사용해 왔다고 상상해 보십시오. 그러다가 갑자기 추가 모듈 A를 작성합니다. 게다가 B는 이미 유지 관리되지 않는 모듈일 수도 있고, 모듈 B가 외부에서 관리하는 상용 제품일 수도 있으며, 라이선스 측면에서 구성 변경이 금지될 수도 있습니다.

A모듈에서도 같은 문제가 발생할 수 있으니 B모듈만 제어하면 되는데...

세 번째, 네 번째 등의 모듈을 믹스에 혼합하면 또 다른 문제가 발생할 수 있습니다. 대칭 변경을 유지하는 것은 매우 복잡해질 수 있습니다.

답변2

흰부엉이는 다음과 같이 올바르게 지적합니다.

Before=A에 정의된 경우에는 B.service지정할 필요가 없습니다 After=B.A.service

이 답변은 이를 설명하는 몇 가지 문서를 제공합니다.

After=과 사이의 관계는 Before="역속성"이라는 것입니다. Before="forward" 속성인 경우 " After=reverse" 속성입니다.

man systemd.unit이것을 설명합니다 :

두 번째 장치와 관계를 생성하는 장치 설정은 일반적으로 systemctl show 출력과 같이 두 장치의 속성에 표시됩니다. 경우에 따라 속성 이름이 구성 설정 이름과 동일하지만 항상 그런 것은 아닙니다. 이 표에는 일부 종속 관계로 연결된 두 셀에 표시된 속성이 나열되어 있으며 "소스" 셀의 어떤 속성이 "대상" 셀의 어떤 속성에 해당하는지 보여줍니다.

그런 다음 매뉴얼 페이지에서는 모든 정방향/역방향 관계가 포함된 테이블을 제공합니다.

"전달" 속성 "역방향" 속성 사용 장소 사용 장소 (역방향)
이전= 이후 = [단위] 섹션
이후 = 이전= [단위] 섹션
필요= 필수= [단위] 섹션 [설치] 섹션
원하다 = 원하는 사람 = [단위] 섹션 [설치] 섹션
부분 = 구성= [단위] 섹션 자동 속성
=에 묶다 바인딩= [단위] 섹션 자동 속성
전제조건= 전제조건= [단위] 섹션 자동 속성
트리거= 트리거 = 자동 속성, 아래 참고 사항 참조
갈등 = 갈등 = [단위] 섹션 자동 속성
재장전 확산= =에서 전파 다시 로드 [단위] 섹션
=에서 전파 다시 로드 재장전 확산=
팔로우 = 해당 없음 자동 속성

따라서 WantedBy=이 섹션 [Install]의 설정은 Wants=선택한 장치와의 관계를 생성합니다.

관련 정보