私が文書で知っている限りシステム、電子が依存ユニットファイルに配置され、その逆の場合を除いてWants=
同じWantedBy=
機能を実行します。 (次にディレクトリを WantedBy=
作成し、シンボリックリンクで埋めます。)unit.type.wants
~からDigitalOcean:Systemdユニットとユニットファイルの理解:
このディレクティブを使用すると、このセクションのディレクティブと
WantedBy=
同様の方法で依存関係を指定できます。違いは、このコマンドがセカンダリに含まれており、リストされているプライマリデバイスが比較的クリーンな状態に保たれることです。Wants=
[Unit]
これは本当にユニットファイルを「きれいに」保つためのものですか?これら2つのディレクティブを使用する最良の方法は何ですか?つまり、サービスアルファがサービスベータを「望む」場合は、いつWants=beta.service
inを使用し、alpha.service
いつWantedBy=alpha.service
使用する必要がありますかbeta.service
?
答え1
機能的に
Wants
Unit
部分的に位置し、WantedBy
に位置しますInstall
。
initプロセスはその部分をまったくsystemd
処理/使用しません。Install
代わりにシンボリックリンクを作成する必要がありますmulti-user.target.wants
。通常、これはsystemctl
セクションを読むユーティリティによって行われますInstall
。
つまり、WantedBy
影響を受けます。systemctl enable
systemctl disable
論理的に
どのサービスが他のサービスを「認識」するか、「認識」するかを検討してください。たとえば、一般的な使い方は次のとおりですWantedBy
。
[Install]
WantedBy=multi-user.target
または multi-user.target で次の操作を行います。
[Unit]
Wants=nginx.service
しかし、2番目の方法は意味がありません。論理的には、nginx.serviceはシステム定義のmulti-user.targetについて知っていますが、その逆ではありません。
したがって、あなたの例では、アルファの作成者がベータを知っている場合、アルファWants
はベータです。ベータ作者がアルファを知っているなら、ベータはWantedBy
アルファです。
決定に役立つように、他のサービス(パッケージマネージャなど)なしでインストールできるサービスを検討してください。
構成ディレクトリ
ボックスにある別のツールとして、構成ディレクトリ/etc/systemd/system/myservice.service.d/extension.confを使用してsystemdファイルを拡張することもできます。
これにより、元のサービスが他のサービスの知識として生成されなかった依存関係を追加できます。私はしばしばこれをマウントで使用します。たとえば、nginxやマウントはお互いを明示的に知る必要はありませんが、システム管理者としての依存関係を理解しています。だからnginx.service.d/mymount.conf
私はWants=mnt-my.mount
。
答え2
これは機能的に同じではありません。設定Wants=
(およびシンボリックリンクファイル)は依存関係です。このWantedBy=
設定は、サービスを有効/無効にするときのこれらの依存関係の作成/ターゲットを制御します。
だからない最高慣行。持つ正しい慣行。与えられた状況に対して、両方のうちの1つだけが正しい機能を持っています。常に存在する持続的な依存関係を望む、enable
使用/オン、またはオフにできる一時的な依存関係が必要ですdisable
。