
Sowohl „Read“ als auch „Sleep“ (mit openvt -w
) werden ausgeführt ( read -p
eine 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.service
zu 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.