udev 규칙에 "ENV{SYSTEMD_WANTS}+="your.service"를 추가하면 서비스가 장치를 기다리게 됩니까?

udev 규칙에 "ENV{SYSTEMD_WANTS}+="your.service"를 추가하면 서비스가 장치를 기다리게 됩니까?

다음 예를 고려하십시오.

console-scaling.service시작 시 콘솔 글꼴을 조정하고 /dev/fb0 장치가 필요한 서비스가 있습니다 . 따라서 udev 규칙을 추가했습니다.

KERNEL=="fb0", SUBSYSTEM=="graphics", TAG+="systemd", ENV{SYSTEMD_WANTS}+="console-scaling.service"

언뜻 보면 이는 Wanted=dev-fb0.device서비스 정의와 동등한 기능을 효과적으로 추가하므로 이해가 됩니다.

그러나 서비스가 수행되지 않는다는 것을 보장하는 것은 무엇입니까?앞으로장치가 생성되었나요? 즉, Wanted=...해당 절을 추가하기 전에?

답변1

하지만 장치가 생성되기 전에 서비스가 실행되지 않도록 하려면 어떻게 해야 할까요? 즉, Wanted=... 절을 추가하기 전에?

아니요. WantedBy는 원하지 않습니다.반대종속성. 당신이 요구하는 것은 서비스에서 장치로의 의존성입니다. udev는 정반대입니다.

(좀더 정확히 말하면 이 조항은아니요서비스에 완전히 추가되었습니다. [Install] WantedBy는 "실제" 종속성이 아니기 때문에 쓸모가 없습니다. 반대로,장비유닛 획득 [Unit]은(는) 귀하의 서비스에 의존하기를 원합니다. )

따라서 서비스에서 장치를 요구하도록 하려면 서비스에서 문자 그대로 지정하십시오.

[Unit]
Wants=dev-fb0.device   (Requires or even Requisite would be better)
After=dev-fb0.device

두 단위는 서로 원하는/요구 종속성을 가질 수 있습니다.주문하다(즉, 이전/이후)는 원형이 아닙니다.

관련 정보