Ich arbeite an einem systemd
.service
Skript, das gestartet werden soll, nachdem ein CIFS-Netzwerkstandort beim Booten über /etc/fstab
to eingehängt /mnt/
wurde.
Das Skript wartet darauf, dass zuerst ein OpenVPN-Abhängigkeitsskript gestartet wird, aber ich möchte auch, dass es wartet, bis der Ladevorgang abgeschlossen ist.
/etc/systemd/system/my-daemon.service :
[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service
Ich habe versucht, Folgendes systemd.mount
in die Zeile aufzunehmen:, After=network.target vpn-launch.service systemd.mount
aber es hat nicht die erhofften Ergebnisse geliefert.
systemd-remount-fs
IhrerAfter
Liste hinzufügen ?Antworten:
Nein ist es nicht. Wenn Sie das richtig machen, passt der Rest auf natürliche Weise.
Der Mount wird von einer (generierten) systemd- Mount-Unit ausgeführt , die so etwas wie den Namen trägt
mnt-wibble.mount
. Sie können den tatsächlichen Namen in der Ausgabe dessystemctl list-units --type=mount
Befehls sehen. Sie können es wie jedes andere Gerät mit genauer betrachtensystemctl status
.Dann ganz einfach: Sie müssen bestellen, dass Ihr Gerät gestartet wird, nachdem dieses Mount-Gerät gestartet wurde.
Weitere Lektüre
quelle
Entschuldigung, aber ich kann noch keinen Kommentar abgeben.
Wie JdeBP sagte, sollten Sie auf dem Dateisystem Mount bestellen. Sie können den Namen der Mount-Einheit vorhersagen oder alternativ (im Unit-Bereich) Folgendes verwenden:
Diese Option erstellt die Abhängigkeiten zu den entsprechenden * .mount-Einheiten, um den Pfad vor dem Starten des Dienstes zugänglich zu machen. Es ist möglicherweise nicht auf allen Systemversionen verfügbar, aber ich habe es in den letzten 6 Monaten auf einem CentOS 7-Computer verwendet.
quelle
RequiresMountsFor=
Hat seine eigenen Vorbehalte. Mit RedHat Bug # 1088057 und Chris Siebenmann in der Hand, sollten Sie in der Lage sein antworten superuser.com/questions/988734 . Auch in dieser Frage handelt es sich um ein CIFS-Mount. Aber die Implikation ist, dass es zumauto
Glück ist.Obwohl beide Antworten korrekt sind, möchte ich meine zwei Cent in die Diskussion einbringen, da mir nach der Suche einige Anweisungen und Beispiele für das weitere Vorgehen fehlten.
/etc/fstab
mount -a
dem alle in fstab genannten Dateisysteme gemountet werdensystemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'
(sollte etwas zurückgeben, das mit endet.
.mount
)After=
Anweisung in der*.service
Datei hinzuHier ist ein Beispiel für das Starten des
my-daemon
Dienstes beim Booten, aber nachdem das Netzwerk bereit ist, wird eine CIFS-Freigabe unter bereitgestellt/mnt/cifs
und dervpn-launch
Dienst wurde gestartet:/ etc / fstab
Hinweis: Möglicherweise möchten Sie
nofail
Ihre fstab-Optionen erweitern (z. B. bei Verwendung eines externen Laufwerks). Andernfalls startet Ihr Computer nicht, wenn das Gerät nicht angeschlossen ist. Siehe ArchWikis Artikel fstab/etc/systemd/system/my-daemon.service
Vergessen Sie nicht, den Dienst so zu aktivieren, dass er beim Booten gestartet wird:
systemctl enable my-daemon
Beachten Sie, dass dies auch für andere Dateisysteme (NFS, Festplatten usw.) funktioniert.
Wie bereits erwähnt, sind beide Antworten richtig und ich empfehle jedem, sie zu lesen, aber für mich hätten ein paar Beispiele mir Zeit gespart.
Update (25.06.2019):
mnt-cifs.mount
zurRequires=
Liste hinzugefügt , diemy-daemon.service
das Fehlschlagen des Startvorgangs verursacht , wenn die cifs-Bereitstellung nicht erfolgreich bereitgestellt wurdequelle
systemctl list-units --type=mount
.@ bm-bergmotte: danke für deine anweisung, die mir sehr geholfen hat. Bei mir funktioniert es einfach, wenn ich sage
Wenn ich "mnt-cifs.mount" nicht in das Feld "Requires" (und in dieser Reihenfolge) einbaue, funktioniert dies für den Neustart / Start. Der Dienst wird jedoch trotzdem gestartet, wenn das Gerät nicht gemountet ist. Nachdem Sie es zusätzlich in "" Requires "gestellt haben, wird das Gerät vom Dienst vor dem Start gemountet, falls das Gerät nicht gemountet wurde.
quelle
After=
diktiert nur die Reihenfolge.Requires=
macht es zwingend erforderlich, dass das cifs-Mount vorhanden sein muss (siehe Antwort von Sufiyan Ghori zu diesem Thema). Ich werde meine Antwort aktualisieren.