Systemd ist ein System- und Sitzungs-Manager (Init-System), der für die Verwaltung aller auf dem System laufenden Dienste über die gesamte Betriebszeit des Rechners, vom Startvorgang bis zum Herunterfahren, zuständig ist. Prozesse werden dabei immer (soweit möglich) parallel gestartet, um den Bootvorgang möglichst kurzzuhalten. Die einzelnen Dienste verwaltet Systemd über Scripte in den Ordnern „/etc/systemd/system“ und „/etc/systemd/user“.
Steuerung / Verwaltung der Systemdiente
Jeder mit Systemd konfigurierte Dienst kann über die folgenden Befehle gesteuert werden:
systemctl start [name.service] | => | Startet Dienst | |
systemctl stop [name.service] | => | Stoppt Dienst | |
systemctl restart [name.service] | => | Startet Dienst neu | |
systemctl reload [name.service] | => | Lädt Dienst Konfiguration neu | |
systemctl status [name.service] | => | Zeigt Dienst Status an | |
systemctl enable [name.service] | => | Dienst wird bei Systemstart geladen | |
systemctl disable [name.service] | => | Dienst wird bei Systemstart nicht geladen | |
sudo systemctl is-enabled [name.service] | => | Prüfen ob Dienst geladen ist |
Erstellen einer Unit (Dienstscriptes)
Systemd benötigt zur Steuerung der Dienste zwei Dateien:
- Die Steuerungsdatei zum Verarbeiten der Befehle bzw. des Programmcodes (Unit)
- Die eigentliche Datei mit den Befehlen bzw. Programmcode (Scripte, Binaries etc.)
Die Script- oder Programmdatei wird aus der entsprechenden Unit heraus mit den o.g. Steuerungsoptionen aufgerufen. Units werden z.B. für Dienste, Timer, Einhängepunkte, Sockets, Swap-Speicher und Geräte (devices) erstellt. Unit-Dateien bestehen aus mehreren Abschnitten (i.d.R drei, Sektionen genannt), in der eine Reihe von Schlüssel-Werte Paaren (Direktiven), definiert ist. Unter dem Pfad /etc/systemd/system/* werden üblicherweise selbstangelegte Unit Datein abgespeichert. Systemweite Systemd-Scripts liegen hingegen unter /lib/systemd/system/*.
Die grundlegende Unit Datei setzt sich dabei wie folgt zusammen:
1 2 3 4 5 6 7 8 9 |
[Unit] Description=Example systemd service. [Service] Type=simple ExecStart=/bin/bash /path/to/your-script.sh [Install] WantedBy=multi-user.target |
- Unit – In diesem Block können Abhängigkeiten von anderen Services beschrieben werden, aber auch die Beschreibung für den eigentlichen Service selbst.
- Service – Hier werden genaue Anweisungen für den Service definiert.
- Install – Beschreibt alle benötigten Informationen um den Service beim Systemstart zu starten.
Eine etwas umfangreichere Unit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# this is /etc/systemd/system/<your_cmd>.service # (or /lib/systemd/system/<your_cmd>.service dependent on # your linux distribution flavor ) [Unit] Description=your_cmd server daemon Documentation=http://mydocumentation.info After=network.target [Service] # see man systemd.service Type=oneshot ExecStart=/usr/local/bin/<your_cmd-start>.sh RemainAfterExit=true ExecStop=/usr/bin/<your_cmd-stop>.sh [Install] WantedBy=multi-user.target |
Eine komplette Auflistung aller Unit Optionen kann mit einem der folgenden Befehle ausgeben werden:
1 2 |
man systemd.unit man systemd.service |
by Speefak| wiki.ubuntuusers.de (Systemd) | wiki.ubuntuusers.de (Timer_Units) | http://tuxgraphics.org | www.shellhacks.com (Unit Datei Beispiele)