Es kann immer nur ein Init-System aktiv sein. Am 16.04 ist das systemd.
Eine Reihe von Paketen wird mit Dateien für mehrere Init-Systeme geliefert, sodass sie mit mehreren Init-Systemen auf verschiedenen Betriebssystemen verwaltet werden können. Unter Ubuntu werden manchmal Skripte für mehrere Init-Systeme installiert, obwohl nicht alle gleichzeitig verwendet werden.
Neuere init-Systeme versuchen, die Kompatibilität mit älteren Systemen zu gewährleisten. Insbesondere versucht systemd, die Kompatibilität mit Upstart- und SysV-Init-Skripten aufrechtzuerhalten.
Bei dem von Ihnen erwähnten "init.d" -Skript handelt es sich um ein "SysV" -Initialisierungsskript, nicht um ein Upstart-Skript. Außerdem würden "SysV" -Init-Skripte nur beim Booten gestartet, wenn sie mit einem Verzeichnis wie "/etc/rc5.d" verknüpft wären. Sie werden feststellen, dass in Network Manager kein Symlink installiert ist.
Um zu verstehen , wie systemd
alt „SysV“ Init - Skripte verwaltet, siehe Wie funktioniert systemd Verwendung /etc/init.d scirpts? .
Beantworten Sie nun die Frage, warum es funktioniert, Network Manager mit "service network-manager restart" neu zu starten. Der service
Befehl wird sowohl mit Upstart-Skripten als auch mit SysV-Init-Skripten verwendet, wobei erstere bevorzugt werden. Network Manager hat auch ein Upstart-Skript am 16.04 um installiert /etc/init/network-manager.conf
.
Wenn Sie die Ausgabe von überprüfen sudo strace service network-manager restart
, können Sie ein Gefühl dafür bekommen, was passiert. Zunächst zeigt die Ausgabe, dass systemctl
aufgerufen wird, und gibt an, dass der Befehl an systemd umgeleitet wird. Kurz nach dem Öffnen /usr/bin/service
sehen Sie zunächst, wie die Datei als Shell-Skript eingelesen wird:
open("/usr/sbin/service", O_RDONLY) = 3
...
read(10, "#!/bin/sh\n\n#####################"..., 8192) = 8192
Nachdem wir nun wissen, dass service
es sich um ein Shell-Skript handelt, können wir den Quellcode überprüfen. Im Quellcode finden wir, dass is_systemd
erkannt und gesetzt wird. Für den Fall systemd können Sie sehen, dass der Befehl umgeschrieben wird systemctl restart network-manager
.
Während die drei Init-Systeme nebeneinander existieren und eine gewisse Kompatibilität aufweisen, gibt es Komplexitätsebenen. Um die Komplexität des zukünftigen Geschehens zu minimieren, sollten Sie System-Unit-Dateien und das systemctl
Tool zum Verwalten von Diensten verwenden.