Was startet in systemd vom Generator erzeugte Einheiten?

10

Auf meinem Computer (Arch Linux) generiert systemd-generator einige Unit-Dateien in /run/systemd/generator/und sie scheinen irgendwie beim Booten gestartet zu werden. Was fängt sie an?

Wird beispielsweise boot.mountvon systemd generiert. systemctl list-dependencies --allzeigt, dass es mit verknüpft ist local-fs.target(was nicht generiert wird). Wie sind sie miteinander verbunden? In diesen beiden Einheiten gibt es nichts, was den Start von auslösen könnte boot.mount. Nun, in boot.mount, gibt es Before=local-fs.target, aber das startet keinen Dienst, oder?

Gradient
quelle

Antworten:

9

Generierte Einheitendateien werden von systemd nicht automatisch aktiviert. Für systemd ist nichts Besonderes an ihnen. Jeder einzelne Generator muss explizit symbolische Verknüpfungen erstellen, die eine generierte Einheit mit einem Ziel verbinden, damit die Aktivierung des Ziels die generierte Einheit auf normale Weise über eine Abhängigkeit aktiviert.

Dies nutzt die Tatsache aus, dass nicht alle Verbindungen zwischen Einheiten in den Einheitendateien ausgedrückt werden. Wants and Requires-Abhängigkeiten können mit symbolischen Linkfarmen in *.wants/und *.requires/Unterverzeichnissen ausgedrückt werden . Und diese symbolischen Linkfarmen umfassen /run/systemd/unter anderem Unterverzeichnisse .

Mit anderen Worten: Anstatt eine Einheit mit zu schreiben WantedBy=local-fs.targetund dann explizit aufzurufen sytemctl enable, um die symbolische Verbindung herzustellen (was die Aktivierung bewirkt), schließt der Generator den Prozess kurz und stellt die symbolische Verbindung selbst her. Und es macht es an einem kurzlebigen Ort, der systemctl enablenormalerweise nicht wäre, wodurch verhindert wird, dass die symbolische Verbindung nach dem nächsten Herunterfahren weiter besteht und der nächste Start verwirrt wird.

Insbesondere finden Sie auf Ihrem System, /run/systemd/generator/boot.mountdas symbolisch von verknüpft ist /run/systemd/generator/local-fs.target.wants/boot.mount. systemd-fstab-generatorhat diese symbolische Verknüpfung erstellt und wird von boot.mountgewünscht local-fs.target. Der Generator wird früh im Bootstrap ausgeführt, bevor das System aktiviert local-fs.targetwird. Dies bedeutet, dass local-fs.targetdie generierte Abhängigkeit befolgt werden muss, wenn es aktiviert wird.

Weiterführende Literatur

JdeBP
quelle
Ok, ich glaube, ich habe es nicht so gut verstanden, wie ich dachte. Ich entferne meine Antwort wegen der Ungenauigkeiten.
Paul H.
Vielen Dank. Dies beantwortet meine Frage. Ich muss das /run/systemd/generator/local-fs.target.requiresVerzeichnis übersehen haben . Was macht dieses Verzeichnis ( /run/systemd/generator) zu einem Verzeichnis, in dem wir Einheitendateien ablegen können? Ich habe es in keiner Manpage gefunden.
Gradient
Beim Lesen systemd.generator(7)scheint es der Generator zu sein, der systemd dieses Verzeichnis bekannt macht.
Gradient
Im Grunde setzt der Generator sie auf Autostart (oder nicht, zum Beispiel bei init.d-Skripten, die nicht über chkconfig verknüpft sind, er hat nur systemd-Einheitendateien für sie erstellt und setzt sie nicht auf Autostart).
Rogerdpack