Wenn bei einem manuellen Aufruf von service
Syset ein Skript von /etc/init.d oder /etc/rc.d ausgeführt wird, hängt die gesamte Statusausgabe vollständig von diesem Skript ab.
Richtig geschriebene init.d-Skripte verwenden eine Bibliothek von Shell-Funktionen, die von der Distribution bereitgestellt werden. In Debian laden (zum Beispiel) die meisten Skripts die Datei /lib/lsb/init-functions
und rufen einfach die bereitgestellten Funktionen wie folgt auf :
Fall "$ 1" in Start) log_daemon_msg "$ DESC wird gestartet " "$ NAME" do_start Fall "$?" im 0 | 1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; [...] esac
Hier ist die Liste der von LSB definierten Standardfunktionen . (Beachten Sie, dass distros kann vorsehen, zusätzliche über die Standardfunktionen, wie das Beispiel oben. Auch zu beachten, dass zB OpenRC oder Arch Linux ist nicht LSB-kompatibel und ganz verschiedene Stile verwenden.)
Tatsächlich stellen einige Distributionen diesen Boilerplate-Code auch zentral bereit, und das init.d-Skript muss nur noch implementiert werden do_start
. (Siehe Gentoo OpenRC und Debian /lib/init/init-d-script
als Beispiele). Dies ist jedoch keine "Standard" -LBB-Funktion - Skripts, die versuchen, LSB-kompatibel zu sein, müssen dies noch manuell tun.
Hinweis: I ‚richtig geschrieben‘ betonen, weil wirklich nichts da ist, das würde zwingen, ein init.d - Skript diese Funktionen, andere als menschliche Aufsicht zu verwenden. Wenn das Skript den Status per Klartext echo
(oder über cowsay
diese Angelegenheit) melden möchte, kann es dies immer tun. Dies ist insbesondere bei kommerzieller Software, die außerhalb der normalen Kanäle vertrieben wird, ein Problem: Ihre Statusausgabe sieht nie ganz richtig aus (und ehrlich gesagt, das ganze init.d-Skript verhält sich nie ganz richtig).
Wenn SysV-Skripts während des Startvorgangs aufgerufen werden, ist das Ergebnis sogar noch stärker von der Distribution abhängig. Manchmal wird die Ausgabe direkt aus den Skripts selbst angezeigt. Manchmal liefert das "main" -Init-System jedoch eine eigene Statusausgabe für alle Dienste es beginnt. ( Beispiel: Alte Linux-Initscripts von Arch Linux, wenn ein Dienst im Hintergrund gestartet wird.)
Aber Ihr 2. Beispiel ist eigentlich keine SysV-Stil-Init - es ist systemd (was in Ihrem Beispiel einfach ein "altes" init.d-Skript startet). Systemd ist ein vollständiger Dienstmanager, der Dienstkonfigurationen (keine Skripts) verwendet. Daher wird die gesamte Statusausgabe beim Booten / Herunterfahren von systemd selbst bereitgestellt. Dies gilt auch für die meisten anderen "Service Manager", einschließlich init-ng, SMF oder Upstart.