Das bewährte SysvInit-System (/etc/init.d/servicename) ist in die Jahre gekommen und so erfolgen derzeit aus unterschiedlichen Gründen Umstellungen aller großen Distributionen.

Ubuntu hat seit 2012 Upstart als neues System verwendet – wechselt aber jetzt ebenso wie Arch Linux, Fedora,OpenSuse und Debian zu systemd¹.

Der größte und merkliche Vorteil von systemd ist, dass der Systemstart enorm beschleunigt wird, da jetzt parallel gearbeitet wird. Zuvor wurde ein Dienst nach dem anderen gestartet.

Ein weiter Vorteil ist, dass mit Systemd ein Dienst überwacht werden kann und dieser bei Bedarf automatisch neugestartet wird².

Bei der Konfiguration haben sich einige Pfade verändert. /etc/init.d ist obsolet – während der Übergangszeit werden weiterhin init-Skripts in /etc/init.d berücksichtigt, sollte es keine passende Konfiguration für Systemd geben.

Mit Systemd werden nicht nur Dienste zur Laufzeit gestartet bzw. zur Verfügung gestellt, sondern auch mount points, devices oder sockets.

All dies bezeichnet man als Unit³.

Dienste – also service units liegen bei Debian jetzt unter /lib/system/system/

Der Dienst ssh hat typischerweise die Konfigurationsdatei /lib/system/system/ssh.service

Die passende ssh.service zeigt sich wie folgt:

[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=sshd.service

Abfragen von Dienstzuständen:

Bei Sysv-Init reichte ein /etc/init.d/ssh status

Bei Systemd nutzt man systemctl ssh status

Starten von Diensten (service units) mit wechselnden Parametern

Der Dienst openvpn ist das Paradebeispiel. Man besitzt 10 Tunnel zu unterschiedlichen Zielen und möchte jetzt mit dem systemd Skript unterschiedliche Tunnel starten/stoppen.

Service units, die Parameter/Konfigurationen beim Starten erwarten, erkennt man an dem @-Zeichen hinter dem Namen. Z.B. also /lib/systemd/system/openvpn@.service

Hat man eine Konfigurationsdatei /etc/openvpn/kunde1.conf – startet man diese Verbindung mit:

systemctl start openvpn@kunde1

 

Quelle:

¹ http://wiki.ubuntuusers.de/Upstart#Kritik

² http://www.freedesktop.org/software/systemd/man/systemd.service.html#Restart=

³ https://wiki.archlinux.org/index.php/systemd#Using_units

Categories: BlogUncategorized