Ich versuche, einen neuen Dienst (unter Debian Jessie) einzurichten, der einige Mounts einrichten muss, in denen die Netzwerkkonfiguration gespeichert ist. Daher muss dieser Dienst abgeschlossen sein, bevor network.service gestartet wird.
Ich habe folgendes versucht:
[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
#Before=network-pre.target
Before=networking.service
[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes
[Install]
RequiredBy=networking.service
Mit systemd-analyze plot
kann ich sehen, dass mein Dienst startet, aber networking.service
ungefähr 3 Sekunden früher startet:
Anscheinend ist meine Konfiguration falsch, aber es fällt mir schwer, das Problem zu finden ... Jede Hilfe wird sehr geschätzt.
Aktualisieren
Ich habe es derzeit gelöst, indem ich die Dienstkonfiguration so geändert habe, dass sie vorher startet, local-fs.target
anstatt networking.service
:
[Unit]
DefaultDependencies=no
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
Before=local-fs.target
[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes
[Install]
RequiredBy=local-fs.target
Trotzdem möchte ich verstehen, warum meine erste Konfiguration nicht wie erwartet funktioniert hat ...?
/etc/network/interfaces
hat Verweise aufip-up
Skripte, die sich in einer anderen Partition befinden. Diese Partition wird von einem komplexen Skript bereitgestellt/opt/intermodul-mounts/start.sh
, das ausgeführt werden muss , bevor das Netzwerk eingerichtet wird. Derzeit werden dieip-up
Skripte effektiv nicht gestartet, da sie beim Booten nicht verfügbar sind. Wenn Sieservice networking restart
danach ausgeführt werden, werden alle Schnittstellen korrekt aufgerufen.Antworten:
Sie möchten verwenden,
network-pre.target
wenn Sie etwas einrichten möchten, bevor das Netzwerk gestartet wirdSie sollten diese unter
[Unit]
Abschnitt setzen:Referenz
quelle
systemctl is-enabled <unit>
ist immerstatic
. Natürlich kann ich es nicht aktivieren, weil es keine gibtWantedBy=
. Was will es denn? Dies ist etwas, das einige Einstellungen vor dem Laden des Netzwerks vornimmt.Before=network-pre.target
undWants=network-pre.target
und für die[Install]
wir habenWantedBy=network.target
. Der letzte Abschnitt zwang es, durch die Vernetzung benötigt zu werden, der erstere ordnete es. War allerdings ein SchmerzWie in Debian Jessie hat das Paket netfilter-persistent (das Laden von iptables-Regeln, bevor das Netzwerk aktiv ist) einen netfilter-persistent.service , der wie folgt aussieht:
quelle
shutdown.target
?!Der Fehler ist einfach und eines der wichtigsten Dinge, die ich immer verwechsle: Sie mischen
Before
undRequiredBy
. Das passt nicht zusammen. Die anderen haben Recht mit dem Ziel.quelle
Wenn Sie etwas in diese Richtung tun, wird sichergestellt, dass dieses Gerät vor dem Netzwerk ausgeführt wurde, jedoch nachdem die meisten anderen wichtigen Einstellungen vorgenommen wurden.
quelle