体系化:ニーズと欲求

体系化:ニーズと欲求

違いはありますか?必要そして〜したいターゲットファイルに?

[Unit]
Description=Graphical Interface 
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service

ありがとう

答え1

heemaylがコメントで指摘したように、マニュアルページはあなたの質問に対する答えです。インターネットから:

欲しい=

Requires= の弱いバージョンです。ハイブがすでに起動している場合は、このオプションにリストされているデバイスが起動します。ただし、リストされているデバイスがアクティブでない場合やトランザクションに追加できない場合、これはトランザクション全体の有効性には影響しません。これは、あるデバイスの起動を別のデバイスの起動に接続するための推奨方法です。

そして

必要=

他のユニットの要件依存関係を構成します。このデバイスがアクティブになると、ここにリストされているデバイスもアクティブになります。他のデバイスのいずれかが無効または有効になっていない場合、このデバイスは無効になります。このオプションは複数回指定することも、1つのオプションでスペースで区切った複数の単位で指定することもできます。この場合、リストされているすべての名前に対して要件の依存関係が生成されます。需要依存性は、サービスの開始または停止の順序には影響しません。これはAfter =またはBefore =オプションを使用して独立して設定する必要があります。 foo.service デバイスに Requires= で構成される bar.service デバイスが必要で、After= または Before= で構成された順序がない場合、foo.service が有効になると、2 つのデバイス間で遅延なく同時に起動されます。通常、失敗したサービスに対してシステムをより強力にするには、Requires =の代わりにWants =を使用することをお勧めします。

この依存関係タイプは、このデバイスが実行されているときに他のデバイスを常にアクティブにする必要があるわけではありません。具体的には、失敗した条件チェック(ConditionPathExists =、ConditionPathExists =、... - 以下を参照)は、Requires =依存関係を持つデバイスの起動操作に失敗することはありません。さらに、一部のデバイスタイプはそれ自体で無効にすることができます(たとえば、サービスプロセスが完全に終了することを決定したり、ユーザーがデバイスのプラグを抜くことがあります)。これはRequires =依存関係を持つデバイスには伝播されません。 After= と共に BindsTo= 依存関係タイプを使用すると、他の特定のユニットもアクティブでない限り、そのユニットがアクティブにならないようにすることができます (下記参照)。

~からfreedesktop.org ページ

サービスは次の場合にのみ開始されます。マルチユーザーターゲット到達すると(該当するターゲットに追加しようとするとどうなりますか)、systemdは起動を試みます。ディスプレイマネージャ。サービスあなたのサービスで。もしディスプレイマネージャ。サービス失敗の理由に関係なく、サービスは引き続き開始されます(したがって、ディスプレイマネージャが本当に必要な場合はRequires=それを使用してください)。もしマルチユーザーターゲットただし、到達しないとサービスは開始されません。

あなたのサービスは何ですか?キオスクシステムですか?直感的に、私はサービスをmulti-user.targetに追加し(起動時に起動します)、厳密に依存するようにしたいと思います。ディスプレイマネージャ。サービス通過するRequires=display-manager.service。だが今すぐはそれはただのとんでもない推測にすぎない。

答え2

私たちのサーバー展開では、すべてのユーザーIDと自動マウントマッピングでLDAPを使用します。ユーザーのホームディレクトリはNFSとしてマウントされ、ユーザーは通常ホームディレクトリに実行可能なコードを使用して@reboot cronjobを生成します。また、キャッシュに sssd を使用します。言うまでもなく、私たちはこの構成が正しく機能するために決定的な起動順序を提供する能力に大きく依存しています。私たちは非常にきれいなシステム構成を開発し、「希望」と「必要な」セクションオプションの間に微妙な違いを見つけました。

サービスの起動時にエラーが発生し、そのサービスの「requires」に依存する他のサービスがあり、サービスオプションに「restart = always」が設定されている場合、依存サービスは再起動されません。ただし、オプションとして「希望」がある場合、関連サービスは期待どおりに再起動されます。

関連情報