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