Wie bringe ich den Systemd-Dienst dazu, den Bootvorgang anzuhalten, wenn er auf Benutzereingaben wartet?

Wie bringe ich den Systemd-Dienst dazu, den Bootvorgang anzuhalten, wenn er auf Benutzereingaben wartet?

Sowohl „Read“ als auch „Sleep“ (mit openvt -w) werden ausgeführt ( read -peine Meldung wird angezeigt), der Bootvorgang kann jedoch nicht angehalten werden.

Ich habe viele Kombinationen von Optionen in ausprobiert /etc/systemd/system/<service>:

Type=oneshot
TimeoutSec=5000
StandardInput=tty

Ein Anwendungsfall ist das Laden der GUI erst, nachdem das Serviceskript nicht mehr ausgeführt wird. Ich muss optional sshfs (auch mehrere Benutzer- und Hostnamenoptionen) als /home mounten, bevor die GUI geladen wird und /home als lokale Partition „einfriert“ (Standard).

Antwort1

„Bootvorgang anhalten“ trifft bei systemd nicht unbedingt zu, da systemd mehrere Dienste parallel ausführt.

Durch das Hinzufügen von „Abhängigkeiten“ zu Diensten können Sie jedoch im Wesentlichen angeben, an welchem ​​Punkt das „Booten pausieren“ und auf Ihren Dienst warten soll.

Für den obigen Anwendungsfall fügen Sie Folgendes hinzu /etc/systemd/system/<service>:

[Unit]
Description=commands to run before GUI loads
Before=display-manager.service

Dies wird Sie zwingen, display-manager.servicezu warten <service>. In meinem Fall <service>beinhaltetBenutzereingabe(für die Leser, die keine Verbindung herstellen konnten), wodurch der Bootvorgang effektiv „angehalten“ wird.

Nachfolgend finden Sie auch einen Kommentar anderer Kommentatoren, die ihre Skepsis geäußert haben:

Es gibt einen Anwendungsfall für diese Art von Dingen – das Entsperren verschlüsselter Partitionen. Aufgrund von Fehlern in systemd (bugs.freedesktop.org/show_bug.cgi?id=88483) ist es nicht möglich, ein verschlüsseltes Btrfs-Array mit mehreren Geräten während des Bootens mit dem standardmäßigen systemd-Mechanismus zu entsperren. Sie müssen Ihre eigene systemd-Servicedatei erstellen und diese Antwort enthielt das fehlende Bit, das ich nach stundenlangem Versuchen in meiner Servicedatei brauchte. Danke, argle.

verwandte Informationen