추가 읽기

추가 읽기

존재하다이 예시스템 단위 파일:

# systemd-timesyncd.service
...

Before=time-sync.target sysinit.target shutdown.target
Conflicts=shutdown.target
Wants=time-sync.target

systemd-timesyncd.service시작해야한다앞으로 time-sync.target. 이는주문 의존성.

하지만 동시에systemd-timesyncd.service ~ 고 싶어요 time-sync.target. time-sync.target그쪽도 마찬가지야요구사항 종속성

이 관계의 사용 사례는 무엇입니까? 왜 그들은 서로 충돌하지 않습니까?

답변1

이 이중 관계의 사용 사례는 "제공" 관계와 유사합니다. systemd-timesyncd장치 쌍에 대한 모든 종속성을 충족할 수 있도록 시간 동기화 서비스를 제공합니다 time-sync.target. 시간 동기화에 의존하는 모든 서비스에 필요하기 때문에 이 전에 시작해야 하며 , 시간 동기화에 의존하는 모든 장치는 서비스와 함께 시작되어야 하기 때문에 time-sync.target필요합니다 .time-sync.targetsystemd-timesyncd

이런 오해는 '원하다'에 대한 이해에서 비롯된 것 같아요. systemd의 "원하는" 관계는 종속 관계가 아닙니다. 작동할 systemd-timesyncd필요가 없습니다 . time-sync이는 "다음으로 시작" 관계입니다. 이는 hive( systemd-timesyncd.service)가 나열된 장치( time-sync.target)가 그것으로 시작하기를 원함을 나타냅니다.

당신은 또한 볼 수 있습니다systemd의 어떤 서비스가 time-sync.target을 제공합니까?

답변2

이 메커니즘의 목적은 정렬 관계가 설정될 수 있도록 하는 것이지만실패한필요한 경우가 아니면.

time-sync.target주문 마일스톤입니다. "시간 동기화"를 제공하는 모든 서비스는 "시간 동기화"가 적용될 때까지 대상이 준비되지 않도록 Before지정 합니다. time-sync.target런타임 시 적용되기 위해 "시간 동기화"가 필요한 모든 서비스 Aftertime-sync.target.

후자가 Wants대상과도 관련이 있는 경우에는언제나주문되는 항목 집합에 항상 포함되기 때문에 궁극적으로 주문됩니다.

실제로 구체적인 "시간 동기화" 서비스가 없다면 이는 차선책으로 간주됩니다. 시스템에 속한 사람들은 이 경우 그러한 명령이 적용되어서는 안 된다고 생각합니다. 대신, 서비스는 time-sync.target존재하지 않는 것처럼 주문해야 하며 일부 서비스는 더 일찍 시작될 수 있도록 해야 합니다(마일스톤이 없는 "자연스러운" 장소인 경우).

해결책은 time-sync.target실제로 존재하지 않습니다. 시간 동기화가 가능해진 후에 시작될 것으로 예상되는 서비스에는 필요하지 않습니다. 따라서 다음과 같은 경우에는 주문된 사물 집합에 존재하지 않습니다.오직 그서비스가 시작되었습니다. 다음과 같은 경우에만 컬렉션에 가져옵니다.실제"시간 동기화" 서비스가 시작되고 이 서비스(클라이언트 서비스 아님)는 Wants이를 도입하는 관계를 갖습니다.

대상이 반드시 서비스 모음일 필요는 없습니다. 마일스톤을 주문할 수도 있습니다.

systemd와 다른 곳에서는 그러한 순수한 이정표가 꽤 많이 있습니다. nosh 도구 세트의 서비스 번들 컬렉션에 있는 대상은 name-services유사한 순수 주문 마일스톤입니다.

추가 읽기

  • 조나단 데보인 폴라드(2018).system-control. 스낵 가이드. 소프트웨어.

답변3

time-sync.target정확한 시간에 의존하는 서비스가 systemd-timesyncd, ntpd 등에 의존할 필요가 없도록 시스템에 있는 플래그입니다.

Before항목은 systemd에게 systemd-timesyncd를 시작한 다음 time-sync.target을 시작하라고 지시합니다(이는 정렬에만 사용됩니다). Wants실제로 플래그를 설정하도록 지시합니다 .

관련 정보