追加読書

追加読書

マイコンピュータ(Arch Linux)では、systemd-generatorは/run/systemd/generator/起動時に何らかの方法で起動するように見えるいくつかのユニットファイルを生成します。何が始まりましたか?

たとえば、boot.mountsystemdによって生成されます。systemctl list-dependencies --all接続されているlocal-fs.target(生成されない)ことを示します。彼らはどのようにつながっていますか?両方のデバイスにstartをトリガーするエントリがないようですboot.mount。まあ、にはboot.mountありますが、Before=local-fs.targetサービスは開始されません。

ベストアンサー1

生成された単位ファイルはsystemdによって自動的にアクティブになりません。 systemdに関する限り特別なことはありません。各個別ジェネレータは、生成されたユニットをターゲットに接続するシンボリックリンクを明示的に生成する必要があります。したがって、ターゲットをアクティブにすると、一般的な方法で依存関係によって生成されたユニットがアクティブになります。

これは、ユニット間のすべての接続がユニットファイル内に表現されるわけではないという事実を利用します。 WantsおよびRequiresの依存関係は、および*.wants/サブディレクトリ*.requires/のシンボリックリンクフィールドを介して表現できます。これらのシンボリックリンクフィールドには、サブディレクトリ/run/systemd/などが含まれます。

WantedBy=local-fs.targetつまり、シンボリックリンクを生成するために明示的に呼び出す必要があるユニットを作成するのではなくsytemctl enable(enableが実行するアクション)、ジェネレータはプロセスを短絡してシンボリックリンク自体を生成します。通常、そうでない一時的な場所に配置し、systemctl enable次の終了時にシンボリックリンクが生き残らないようにし、次の起動時に混乱を招きます。

特に、システムで/run/systemd/generator/boot.mountスレーブシンボリックリンクを見つけることができます/run/systemd/generator/local-fs.target.wants/boot.mountsystemd-fstab-generatorこのシンボリックリンクを作成しました。、これはboot.mountWantedを作成しますlocal-fs.target。ジェネレータは、システムが起動を開始する前に、ブートローダの最初に実行されますlocal-fs.target。つまり、local-fs.target生成された依存関係のアクティブ化を開始するときに従う必要があります。

追加読書

おすすめ記事