(14.02.2014 22:24)winfreak schrieb: 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:
Code:
# /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
Beispiel systemd mit Socket Activation:
Code:
# /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
Code:
# /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
(14.02.2014 22:20)mrshadowtux schrieb: 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.