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

2つのユニットは、お互いに希望/要求依存関係を持つことができます。注文する(つまり、前/後)は円形ではありません。

関連情報