답변:
의견에서 heemayl이 언급했듯이 맨 페이지는 귀하의 질문에 답변합니다. 웹에서 :
구함 =
Needs의 약한 버전. 구성 단위가 구성되어 있으면이 옵션에 나열된 장치가 시작됩니다. 그러나 나열된 단위가 시작되지 않거나 트랜잭션에 추가 할 수없는 경우 트랜잭션 전체의 유효성에 영향을 미치지 않습니다. 이것은 한 장치의 시작을 다른 장치의 시작에 연결하는 권장 방법입니다.
그리고 필요 = :
다른 장치에 대한 요구 사항 종속성을 구성합니다. 본 기기가 활성화되면 여기에 나열된 기기도 활성화됩니다. 다른 장치 중 하나가 비활성화되거나 활성화에 실패하면이 장치가 비활성화됩니다. 이 옵션은 두 번 이상 지정되거나 공백으로 구분 된 여러 단위가 하나의 옵션으로 지정 될 수 있으며,이 경우 나열된 모든 이름에 대한 요구 사항 종속성이 작성됩니다. 요구 사항 종속성은 서비스가 시작되거나 중지되는 순서에 영향을 미치지 않습니다. After = 또는 Before = 옵션을 사용하여 독립적으로 구성해야합니다. 유닛 foo.service에 Required =로 구성된대로 유닛 bar.service가 필요하고 After = 또는 Before =로 순서가 구성되지 않은 경우, foo.service가 활성화되면 두 유닛이 동시에 시작되고 지연되지 않습니다. 자주,
이 종속성 유형이이 장치가 실행 중일 때 다른 장치가 항상 활성 상태 여야 함을 의미하지는 않습니다. 구체적으로, 조건 검사 실패 (ConconditionPathExists =, ConditionPathExists =,… — 아래 참조)로 인해 Required = 종속성이있는 장치의 시작 작업이 실패하지 않습니다. 또한 일부 장치 유형은 자체적으로 비활성화 될 수 있습니다 (예 : 서비스 프로세스가 완전히 종료하기로 결정하거나 사용자가 장치의 플러그를 뽑을 수 있음). BindsTo = 종속성 유형을 After =와 함께 사용하면 특정 다른 장치 없이도 활성 상태에있는 장치가없는 상태가 될 수 있습니다 (아래 참조).
다중 user.target 에 도달 한 경우에만 서비스가 시작 되고 (해당 대상에 추가하려고하면 어떻게되는지 모르겠습니까?) systemd는 서비스 전에 display-manager.service 를 시작하려고 합니다. . 경우 디스플레이 manager.service이 어떤 이유로 실패, 서비스는 여전히 (당신이 정말로 디스플레이 관리자, 사용이 필요 그렇다면 시작됩니다 Requires=
그것을위한 참조). 는 IF multi-user.target는 그러나 도달하지, 서비스가 시작되지 않습니다.
당신의 서비스는 무엇입니까? 키오스크 시스템입니까? 직관적으로 서비스를 multi-user.target (따라서 시작시 시작)에 추가하고 를 통해 display-manager.service 에 엄격하게 의존한다고 가정합니다 Requires=display-manager.service
. 그러나 그것은 지금 막 추측 할뿐입니다.
우리의 서버 배포는 모든 사용자 ID 및 자동 마운트 맵을 포함하는 LDAP를 사용합니다. 사용자 홈 디렉토리는 NFS로 마운트되며 사용자는 일반적으로 홈 디렉토리에 실행 코드를 사용하여 @reboot cronjob을 만듭니다. 캐시에도 sssd를 사용합니다. 말할 필요도없이, 우리는이 구성이 작동하기 위해 결정적인 부팅 순서를 제공 할 수있는 것에 크게 의존합니다. 우리는 매우 간결한 시스템 구성을 개발했으며 "원하는"및 "필요한"섹션 옵션 사이에 모호한 뉘앙스를 발견했습니다.
부팅하는 동안 서비스에 장애가 있고 "restart = always"를 서비스 옵션으로 설정하여 해당 서비스에 대해 "요구"와 관련된 다른 서비스가있는 경우 해당 종속 서비스는 다시 시작되지 않습니다. 그러나 옵션으로 "원함"이 있으면 종속 서비스가 예상대로 다시 시작됩니다.
man systemd.unit