차이점이 있나요?필요그리고~ 고 싶어요대상 파일에?
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
감사해요
답변1
heemayl이 의견에서 지적했듯이 매뉴얼 페이지는 귀하의 질문에 대한 답변입니다. 인터넷에서:
원하다 =
Requires=의 약한 버전입니다. 하이브가 이미 시작된 경우 이 옵션에 나열된 장치가 시작됩니다. 그러나 나열된 장치가 활성화되지 않거나 거래에 추가될 수 없는 경우 이는 전체 거래의 유효성에 영향을 미치지 않습니다. 이는 한 장치의 시작을 다른 장치의 시작에 연결하는 권장 방법입니다.
그리고
필요=
다른 단위에 대한 요구 사항 종속성을 구성합니다. 이 장치가 활성화되면 여기에 나열된 장치도 활성화됩니다. 다른 장치 중 하나가 비활성화되거나 활성화되지 않으면 이 장치가 비활성화됩니다. 이 옵션은 여러 번 지정하거나 하나의 옵션에서 공백으로 구분된 여러 단위로 지정할 수 있으며, 이 경우 나열된 모든 이름에 대해 요구 사항 종속성이 생성됩니다. 수요 종속성은 서비스가 시작되거나 중지되는 순서에 영향을 미치지 않습니다. 이는 After= 또는 Before= 옵션을 사용하여 독립적으로 구성해야 합니다. foo.service 장치에 Requires=로 구성된 bar.service 장치가 필요하고 After= 또는 Before=로 구성된 순서가 없는 경우 foo.service가 활성화되면 두 장치 사이에 지연 없이 동시에 시작됩니다. 일반적으로 실패한 서비스에 대해 시스템을 더욱 강력하게 만들려면 Requires= 대신 Wants=를 사용하는 것이 좋습니다.
이 종속성 유형은 이 장치가 실행 중일 때 다른 장치가 항상 활성화되어야 한다는 의미는 아닙니다. 특히: 실패한 조건 검사(예: ConditionPathExists=, ConditionPathExists=, ... — 아래 참조)는 Requires= 종속성을 가진 장치의 시작 작업이 실패하도록 만들지 않습니다. 또한 일부 장치 유형은 자체적으로 비활성화될 수 있습니다(예: 서비스 프로세스가 완전히 종료되도록 결정하거나 사용자가 장치의 플러그를 뽑을 수 있음). 이는 Requires= 종속성을 가진 장치에 전파되지 않습니다. After=와 함께 BindsTo= 종속성 유형을 사용하면 특정 다른 유닛도 활성화되지 않으면 해당 유닛이 활성화되지 않도록 할 수 있습니다(아래 참조).
서비스는 다음 경우에만 시작됩니다.다중 사용자 대상도달하면(해당 대상에 추가하려고 하면 어떻게 되는지 궁금합니다.) systemd가 시작을 시도합니다.디스플레이 관리자.서비스귀하의 서비스와 함께. 만약에디스플레이 관리자.서비스실패 이유에 관계없이 서비스는 계속 시작됩니다(따라서 디스플레이 관리자가 정말로 필요한 경우 Requires=
이를 사용하십시오). 만약에다중 사용자 대상그러나 도달하지 않으면 서비스가 시작되지 않습니다.
귀하의 서비스는 무엇입니까? 키오스크 시스템인가요? 직관적으로 나는 서비스를 multi-user.target에 추가하고(부팅 시 시작됨) 엄격하게 종속되게 만들고 싶다고 생각합니다.디스플레이 관리자.서비스통과하다 Requires=display-manager.service
. 하지만 지금 당장은 그것은 단지 터무니없는 추측일 뿐이다.
답변2
우리의 서버 배포에서는 모든 사용자 ID 및 자동 마운트 매핑과 함께 LDAP를 사용합니다. 사용자 홈 디렉터리는 NFS로 마운트되며 사용자는 일반적으로 홈 디렉터리에 실행 가능한 코드를 사용하여 @reboot cronjob을 생성합니다. 또한 캐싱을 위해 sssd를 사용합니다. 말할 필요도 없이, 우리는 이 구성이 제대로 작동하기 위해 결정적인 부팅 순서를 제공할 수 있는 능력에 크게 의존합니다. 우리는 매우 깔끔한 시스템 구성을 개발했으며 "원함"과 "필요" 섹션 옵션 사이의 미묘한 차이를 발견했습니다.
서비스 시작 시 오류가 발생하고 해당 서비스의 "requires"에 의존하는 다른 서비스가 있고 서비스 옵션으로 "restart=always"가 설정된 경우 종속 서비스는 다시 시작되지 않습니다. 그러나 옵션으로 "원함"이 있으면 관련 서비스가 예상대로 다시 시작됩니다.