Systemabhängigkeiten und Startreihenfolge

20

Ich muss eine Startreihenfolge angeben, damit Prozesse gestartet werden. Ich habe 389 Directory Server und Samba auf Fedora 18. Wie kann ich die Netzwerkdienste booten lassen, dann 389 DS, dann Samba? Gibt es eine GUI, um dies in Fedora zu verwalten?

Ich habe Samba aktiviert, um mit zu beginnen systemctl enable smb.service. Ich habe auch 389 DS mit aktiviert systemctl enable dirsrv.target.

Dylan Klomparens
quelle
Systemd benötigt keine Reihenfolge zwischen den Diensten. Die Idee ist, alles parallel zu starten und die Verbindungen den Servern zu übergeben, sobald sie verfügbar sind. Die von der Standardinstallation vorgegebene Konfiguration sollte in Ordnung sein. Warum müssen Sie Ihrer Meinung nach eine Reihenfolge definieren? Funktioniert etwas nicht?
Vonbrand
Ich sollte auch beachten, dass Sie auf Ihrem Domänencontroller keine Datei- / Druckdienste ausführen sollten, da dies wieder aufgetreten ist.
Michael Hampton
@vonbrand Ich hatte dieses Problem, bei dem mein DHCP-Server slapd zum Hochfahren benötigte (weil seine Konfiguration in einem LDAP-Verzeichnis gespeichert war). Andernfalls würde der DHCP-Server nicht gestartet.
Mat

Antworten:

25

Verwenden Sie systemctl edit smb.servicediese Option, um die Abhängigkeiten zu aktualisieren.

After=dirsrv.target - Stellt sicher, dass der smb.service nach dirsrv.target gestartet wird.

Aus Gründen der Robustheit (die sich lohnen wird, wenn Sie mit diesem Material basteln) möchten Sie möglicherweise auch Folgendes hinzufügen:

Requires=dirsrv.target- Aktiviere dirsrv.target wenn smb.service aktiviert ist. Lässt smb.service fehlschlagen, wenn dirsrv.target fehlschlägt.

Wants=dirsrv.target- Aktiviere dirsrv.target wenn smb.service aktiviert ist. Smb.service schlägt nicht fehl, wenn dirsrv.target fehlschlägt.

BindsTo=dirsrv.target - Wenn dirsrv.target deaktiviert ist, deaktivieren Sie smb.service.

Quelle: http://www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-uibietet eine GUI für systemd. Gibt einen guten Überblick über den Status von systemd, Sie müssen jedoch weiterhin einen Texteditor verwenden, um die Einheitendateien zu ändern.

Guy Gangemi
quelle
In einem Fall, in dem A B erfordert , was bedeutet, dass "B" "fehlgeschlagen" ist, so dass A nicht gestartet wird? Das Programm von B liefert einen Wert ungleich Null?
John Wang
2
Abgestimmt, weil dies schlechte Praxis rät. Bearbeiten Sie die /usr/lib/systemdVersionen der Gerätedateien nur, wenn Sie ein Distributionsbetreuer sind oder wenn Ihre Dateien bei jedem Paketupdate überschrieben werden. Kopieren Sie entweder die Unit-Datei in /etc/systemdund bearbeiten Sie sie dann oder verwenden Sie eine Drop-In-Datei (Details siehe systemd.unit (5)). Noch einfacher, verwenden Sie einfach, systemctl edit smb.servicewas die Drop-In-Datei automatisch zaubert!
Jeremy Visser
3
Vielen Dank für die Bearbeitung der Antwort! Es löst Bedenken auf und ich habe mich zu einer Gegenstimme gewandelt. :-)
Jeremy Visser
10

Mach zwei Dinge:

  1. Bearbeiten Sie die /lib/systemd/system/smb.serviceUnit-Datei, um die Abhängigkeit anzugeben. Der [unit]Abschnitt enthält eine After=Zeile, die angibt, welche Dienste / Ziele vor diesem erreicht werden sollen.

    After=syslog.target network.target nmb.service winbind.service
    

    Ändern Sie es in:

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. Melden Sie diese Abhängigkeit als Fehler an Fedora zurück , damit sie in zukünftigen Versionen enthalten sein kann.

Michael Hampton
quelle
Das scheint nicht zu funktionieren. Samba bootet noch vor 389.
Dylan Klomparens
3
Nachdem Sie unitDateien systemctl daemon-reload
geändert haben
2

Möglicherweise müssen Sie eine Zeile mit der RequiresDirektive im [Unit] Abschnitt der /usr/lib/systemd/system/smb.serviceDatei ändern oder einfügen.

Requires=dirsrv.target

und

After=dirsrv.target
cturiel
quelle
Nun, ich habe für diese Antwort gestimmt, aber ich persönlich würde mit Wants = dirsrv.target anstatt Requires = gehen. (Siehe systemd.unit (5) für Wants =)
Galaxie
2

Es gibt zwei Alternativen zum Ändern der Servicedatei in /usr/lib/systemd/system(siehe Beispiel 2. Überschreiben der Herstellereinstellungen ):

  1. Kopieren Sie die Datei nach /etc/systemd/systemund nehmen Sie die Änderungen an der Kopie vor. Diese Datei überschreibt die Datei in vollständig /usr/lib.

  2. Erstellen Sie die Datei /etc/systemd/system/smb.service.d/local.conf. Der Inhalt der Datei sollte in etwa dem folgenden Beispiel entsprechen. Dadurch werden die Optionen "Erforderlich" und "Nachher" in der vom Anbieter bereitgestellten Servicedatei selektiv überschrieben.

Jede davon (einschließlich der Änderung der Datei in /usr/lib) bietet Vor- und Nachteile. Die beste Wahl kann vom Service und der Art der Änderungen abhängen.

Es reicht möglicherweise nicht aus, nur die Option "Nach" hinzuzufügen (siehe Optionen im Abschnitt [Einheit] ). "Nach" steuert die Reihenfolge, jedoch nicht die Abhängigkeiten. Wenn dirsrv.targetes nicht auf andere Weise gestartet wird, wird es durch Angeben eines Auftrags nicht gestartet. Die Verwendung der Option "Requires" oder "Wants" erzwingt den dirsrv.targetStart.

[Unit]
Requires=dirsrv.target
After=dirsrv.target

NB: Ich weiß nicht, ob dieser Ansatz verfügbar war, als diese Frage ursprünglich gestellt wurde.

Auge
quelle