
マイコンピュータ(Arch Linux)では、systemd-generatorは/run/systemd/generator/
起動時に何らかの方法で起動するように見えるいくつかのユニットファイルを生成します。何が始まりましたか?
たとえば、boot.mount
systemdによって生成されます。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.mount
。 systemd-fstab-generator
このシンボリックリンクを作成しました。、これはboot.mount
Wantedを作成しますlocal-fs.target
。ジェネレータは、システムが起動を開始する前に、ブートローダの最初に実行されますlocal-fs.target
。つまり、local-fs.target
生成された依存関係のアクティブ化を開始するときに従う必要があります。
追加読書
- https://unix.stackexchange.com/a/233581/5132
- ジョナサンデボインポラード(2016)。 」
systemd.unit
マニュアルページにシステム検索パスがありません。」。systemd doco 正誤表。よく与えられる答えです。