Wow, man muss lesen können! Das ultra Gegenargument.
In der Tat. Moderne Init-Systeme kümmern sich selber um den Zustand der Dienste, anstatt wie bei sysvinit einem Satz Shell-Skripte mit gemeinsamer API zu verwenden, die sich bei jeder Ausführung diesen erst einmal selber zusammenklauben müssen. Dadurch fällt wiederum eine Menge Boilerplate-Code weg, der auf längere Sicht die Konfiguration vereinfacht.
Beispiel Upstart, ein eventbasiertes Init-System:
# /etc/init/teamspeak.conf
description "TeamSpeak server"
author "DosAmp"
# okay, das könnte man auch ohne Legacy-Runlevel lösen
# es gibt auch Events für "lokale Dateisysteme gemountet" und "System-Boot/Shutdown"
start on (net-device-up and runlevel [2345])
stop on runlevel [!2345]
respawn
env DIR=/opt/teamspeak/teamspeak3-server_linux-amd64
script
# bräuchen wir diese Umgebungsvariable nicht, könnte man das ganze auf eine "exec ..." Zeile zusammensteichen
export LD_LIBRARY_PATH="$DIR:$LD_LIBRARY_PATH"
start-stop-daemon --start --pidfile $DIR/ts3server.pid --chuid teamspeak --chdir $DIR --exec $DIR/ts3server_linux_amd64
end script
Alles anzeigen
Beispiel systemd mit Socket Activation:
# /usr/lib/systemd/system/sshd.socket
[Unit]
Conflicts=sshd.service
Wants=sshdgenkeys.service
# systemd hört selber auf Port 22 und startet ähnlich inetd sshd bei Bedarf
[Socket]
ListenStream=22
Accept=yes
[Install]
WantedBy=sockets.target
Alles anzeigen
# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH Daemon
# Pseudo-Dienst, der sich um die einmalige Generierung der Host-Keys kümmert
Wants=sshdgenkeys.service
After=sshdgenkeys.service
After=network.target
# alternativ kann sshd auch als klassischer, forkender Hintergrund-Dämon benutzt werden
[Service]
ExecStart=/usr/bin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target
Alles anzeigen
Hör mir auf mit launchd. Ich wollte mir einen Eintrag für einen einzigen Dienst (uptimed) erstellen und musste dann dafür massig Doku lesen.
Zugegeben, dass launchd mit .plist-Dateien ein XML-basierendes Konfigurations-Format benutzt, macht es ein wenig anwenderabstoßend, aber das ist vor allem ein Problem des Gesamt-Frameworks und nicht des Init-Systems. 