Systemd용 유닛(서비스) 파일을 만드는 방법에 대해 질문이 있습니다.
설명서를 읽었으며 몇 가지 질문이 있습니다. 몇 가지 검색을 한 후에 제가 겪고 있는 일부 문제에 대한 세부 정보를 제공하는 매우 유용한 답변을 찾았습니다.
systemd-tmpfiles를 실행하는 systemd .service 파일을 작성하는 방법
이 답변이 도움이 되었지만, 아직 이해가 되지 않는 부분이 있습니다. 주로 이 부분:
우리는 실제로 서비스를 더 빨리 실행하기보다는 나중에 실행하기를 원하므로 "After" 절을 지정합니다. 실제로 WantedBy 대상과 동일할 필요는 없습니다(보통은 그렇지 않음).
After에 대한 나의 이해는 그것이 매우 간단하다는 것입니다. 이 서비스(또는 사용자가 정의한 서비스)는 이후에 나열된 단위 이후에 실행됩니다.
마찬가지로 WantedBy도 단순해 보입니다. 귀하는 귀하가 나열한 단위에 귀하의 서비스가 필요하다고 정의하고 있습니다. 따라서 다중 사용자 또는 그래픽과 같은 목표의 경우 systemd가 목표가 달성되었다고 생각할 수 있도록 장치가 실행되어야 합니다.
이제 지금까지 이러한 선언이 어떻게 작동하는지에 대한 이해가 정확하다고 가정하면 내 질문은 다음과 같습니다. After 및 WantedBy 절에 동일한 단위를 나열하는 이유는 무엇입니까?
예를 들어, After multi-user.target 및 WantedBy multi-user.target 유닛을 정의하면 목표에 도달한 후 유닛을 시작해야 하지만 시작으로 간주되어야 하는 불가능한 상황이 발생하는 것 같습니다. "도달"을 목표로 합니다.
제가 뭔가 잘못 이해한 걸까요?
답변1
매뉴얼에서는 /와 / / 사이의 systemd
관계를 논의합니다.Before
After
Requires
Wants
Bindto
Before=, After=
부분:
이 설정은 Requires=, Wants= 또는 BindsTo=로 구성된 요구 사항 종속성과 독립적이며 직교합니다. After= 및 Requires= 옵션에 장치 이름을 포함하는 것이 일반적인 패턴입니다.
After
이러한 설정을 암시 Wants
하거나 충돌 하지 않습니다 .WantedBy
두 장치가 모두 시작되어 After
종속성 체인에 관계없이 순서가 영향을 받습니다.
나열된 모듈이 After
종속성 체인의 어딘가에 없으면 종속성이 암시되지 않으므로 로드되지 않습니다 After
.
답변2
WantedBy
서비스가 시작되는 순서에는 영향을 주지 않습니다. 에서 언급했듯이시스템 장치 설명서, WantedBy
및 RequiredBy
설명:
이는 나열된 장치의 Wants= 또는 Requires= 유형 종속성을 현재 장치에 추가하는 효과가 있습니다.
Wants
그런 다음 설명 에는 Requires
그것이 말하는 것의 약한 버전이라고 명시되어 있습니다.
수요 종속성은 서비스가 시작되거나 중지되는 순서에 영향을 미치지 않습니다.