私が知る限り、文書からシステム、同じ機能を実行しますWants=
がWantedBy=
、前者は依存ユニット ファイルに配置され、逆もまた同様です。(つまり、ディレクトリWantedBy=
を作成しunit.type.wants
、そこにシンボリック リンクを配置します。)
からDigitalOcean: Systemd ユニットとユニット ファイルを理解する:
ディレクティブ... を使用すると、セクションのディレクティブ
WantedBy=
と同様の方法で依存関係を指定できます。違いは、このディレクティブが補助ユニットに含まれているため、リストされているプライマリ ユニットが比較的クリーンなままであることです。Wants=
[Unit]
本当にユニット ファイルを「クリーン」に保つことが目的なのでしょうか? これら 2 つのディレクティブを使用するためのベスト プラクティスは何ですか? つまり、サービス アルファがサービス ベータを「必要とする」場合、いつ を使用しWants=beta.service
、いつ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
アルファです。
決定を下す際には、他のサービスがなくてもどのサービスをインストールできるか(たとえば、パッケージ マネージャーから)を検討してください。
設定ディレクトリ
ボックス内の別のツールとして、systemd ファイルは設定ディレクトリで拡張することもできることを知っておいてください: /etc/systemd/system/myservice.service.d/extension.conf
これにより、どちらのサービスも元々は互いを認識するように作成されていない依存関係を追加できます。私はこれをマウントでよく使用します。たとえば、nginx もマウントも互いを明示的に認識する必要はありませんが、システム管理者である私は依存関係を理解しています。そのため、nginx.service.d/mymount.conf
で作成しますWants=mnt-my.mount
。
答え2
これらは機能的に同一ではありません。Wants=
設定 (およびシンボリック リンク ファイル) は依存関係です。設定WantedBy=
は、サービスが有効/無効になったときに、このような依存関係の作成/破棄を制御します。
だから最高練習。正しいenable
実践。2 つのうちの 1 つだけが、特定の状況で正しい機能を持ちます。1 つは、常に存在する永続的な依存関係を持つことを意図しており、もう 1 つは、 /でオンとオフを切り替えることができる一時的な依存関係を持つことを意図していますdisable
。