Eigene Unit-Dateien

Falls Sie in den Ablauf beim Booten eingreifen möchten, empfiehlt es sich, beim Anlegen oder Ändern von Unit-Dateien einige Regeln zu beachten. Möchten Sie eine Datei ändern, kopieren Sie diese zuerst von /lib/systemd/ nach /etc/systemd/system/. Neue Unit-Dateien legen Sie ebenfalls dort an: Geänderte oder neue Dateien unter /lib/systemd/ überschreibt das System unter Umständen.

Die Unit-Dateien bestehen aus verschiedenen Sektionen, denen Sie wiederum Anweisungen zuordnen. In der Tabelle "Sektionen und Anweisungen" finden Sie eine Auswahl dazu. In einer Unit-Datei kommt immer nur eine Sektion zusätzlich zum Abschnitt [Unit] und gegebenenfalls [Install] vor.

Sektionen und Anweisungen

Sektion Bedeutung
[Unit] Angabe von Beschreibungen und Abhängigkeiten.
Description= Beschreibung der Funktionalität.
Documentation= Angabe zur Dokumentation.
Requires= Units, von denen der Start der Unit abhängt.
Wants= Ähnlich Requires, behindern den Start aber nicht.
Conflicts= Beendet die angegebenen Units vor dem Start der Unit.
[Install] Anweisung für das Programm sysctl.
Also= Die Aufrufe sysctl enable und sysctl disable bearbeiten die hier gelisteten Units ebenfalls.
RequiredBy= Abhängigkeiten.
[Service] Startkonfiguration von Diensten.
Typ=simple Der bei ExecStart angegebene Aufruf ist der Hauptprozess des angegebenen Services.
Typ=forking Der bei ExecStart angegebene Aufruf beendet sich nach dem Start, Kindprozesse laufen als Hauptprozess.
Typ=oneshot Das System ruft die nächsten Units nach dem Ende des gestarteten Prozesses auf.
Environment= Definition von Variablen.
ExecStart= Angabe des zu startenden Dienstes, eventuell mit Angabe des Pfads.
Restart= Angabe, ob der Dienst neu gestartet ist, nachdem dessen Prozess sich beendet hat oder ein Timeout eingetreten ist. Hat Systemd den Prozess selbst beendet, erfolgt keine Reaktion.
SucessExitStatus= Definition, welche Exit-Codes und welche Signale ein sauberes Beenden des Prozesses kennzeichnen.
[Socket] Socket-basierte Steuerung.
ListenStream= Adresse eines Stream-Sockets.
ListenDatagram= Adresse eines Datagram-Sockets.
ListenSequentialPacket= Adresse für sequenzielle Kommunikation, meist bei Unix-Sockets.
ListenFIFO= Angabe eines FIFO-Puffers.
BindToDevice= Socket an bestimmtes Interface binden
Accept= Bei true: Start einer (weiteren) Instanz des Diensts je Verbindung. Bei false: Eine Instanz arbeitet alle Verbindungen ab.
SocketUser= User-ID des Sockets.
SocketGroup= Group-ID des Sockets.
MaxConnections= Maximale Anzahl Verbindungen (wenn Accept=true).
KeepAlive= Zeitangabe in Sekunden.
[Mount] Verwalten der Einhängepunkte1.
What= Absolute Pfadangabe/Adresse des Geräts, einer Datei oder anderen Ressource (Pflichtangabe).
Where= Absolute Pfadangabe des Einhängepunkts (Pflichtangabe).
Type= Angabe des Dateisystems.
Options= Mount-Optionen.
DirectoryMode= Definition der Zugriffsrechte (Standard: 0755).
TimeoutSec= Wartezeit, bis Operation als fehlgeschlagen gilt.
[Automount] Verwaltung eines Automount-Punkts.
Where= Absolute Pfadangabe des Einhängepunkts.
DirectoryMode= Siehe [Mount].
TimeoutSec= Siehe [Mount].
[Swap] Konfiguration des Auslagerungsspeichers.
What= Pfadangabe zu Gerät oder Datei.
TimeoutSec= Siehe [Mount].
[Path] Pfad, den Systemd überwacht.
PathExists= Prüft, ob der Pfad existiert.
PathModified= Überwacht Änderungen bezüglich des angegebenen Pfads.
Unit= Zu aktivierende Unit.
[Timer] Zeitgeber, der Cron und At ersetzt oder ergänzt.
OnActiveSec= Aktiviert die angegebene Unit, nachdem diese Timer-Unit aktiviert wurde.
OnBootSec= Gibt an, nach welcher Zeit, die seit dem Systemstart verstrichen ist, die angegebene Unit aktiviert werden soll.
OnCalendar= Absolute Zeitangabe.
WakeSystem= Nach Ablauf dieser Zeit System im Suspend-Modus starten.
Unit= Zu aktivierende Unit.
1 Name des Einhängepunkts entspricht dem Namen der Unit-Datei.

Beispiel in Eigenbau

Das Shellskript aus Listing 5 liefert in Intervallen eine Übersicht aller im Netz befindlichen Hosts. Die Ergebnisse betrachten Sie mittels tail -f /tmp/netzliste.txt in einem Terminal. Legen Sie zunächst das Skript im Verzeichnis /usr/sbin als netzschau.sh an. Mittels chmod 700 netzschau.sh vergeben Sie die passenden Rechte. Damit Systemd das Programm startet, legen Sie unter /etc/systemd/system die Unit-Datei netzschau.service (Listing 6) an.

Listing 5

#! /bin/sh
while true;
do
echo "Übersicht aktiver Netzwerkteilnehmer" > /tmp/netzliste.txt
echo "------------------------------------" >> /tmp/netzliste.txt
date +%d.%m.%Y-%H:%M:%S >> /tmp/netzliste.txt
echo "------------------------------------" >> /tmp/netzliste.txt
# Fping ausführen und Ausgabe in Log-Datei speichern
fping -r 0 -g 192.168.0.0/24 > fping.log 2>&1
# Ausfiltern der nicht erreichbaren Hosts
grep "alive" fping.log | sort  >> /tmp/netzliste.txt
echo "------------------------------------" >> /tmp/netzliste.txt
sleep 120
done

Listing 6

[Unit]
Description=Auflistung aktiver Hosts
Documentation=man:fping(8)
[Service]
ExecStart=/usr/sbin/netzschau.sh
IgnoreSIGPIPE=false
[Install]
WantedBy=multi-user.target

Nun weisen Sie Systemd an, die Unit-Datei zu verarbeiten und die Anwendung zu starten. Für den dauerhaften Start aktivieren Sie den Dienst mittels des Befehls aus der ersten Zeile von Listing 7. Dabei legt das System den notwendigen symbolischen Link ins Target-Verzeichnis multi-user.target. Sie starten den Dienst mittels des Befehls aus der zweiten Zeile. Der Befehl aus der letzten Zeile prüft, ob das Programm läuft. Abbildung 3 zeigt das Ergebnis der Statusabfrage.

Listing 7

$ systemctl enable netzschau.service
$ systemctl start netzschau.service
$ systemctl status netzschau.service
Abbildung 3: Bei Bedarf fragen Sie den Status eines laufenden Diensts ab, um zu sehen, ob die Software noch ordnungsgemäß läuft.

Systemctl dient in der Systemd-Welt als zentrales Werkzeug zum Steuern von Aktionen. Ohne weitere Angabe listet es alle Units auf, die das System nach dem Booten gestartet hat. Die Tabelle "Systemctl-Parameter" listet die wichtigsten Argumente für das Tool, mit denen Sie das System über die Unit-Dateien administrieren.

Systemctl-Parameter

Parameter Erläuterung
enable Unit Unit aktivieren
disable Unit Unit deaktivieren
start Unit Unit starten
stop Unit Unit stoppen
restart Unit Unit neu starten
reload Unit Konfiguration neu einlesen
status Unit Status abfragen
mask Unit Unit maskieren
unmask Unit Unit demaskieren
help Unit Hilfe zu Unit aufrufen
list-unit-files Unit-Dateien anzeigen
list-units alle Units anzeigen
-t mount nur Mounts anzeigen
-t automount nur Automounts anzeigen
-t service nur Dienste anzeigen
-t device nur Geräte anzeigen
-t target nur Targets anzeigen
-t snapshots nur Snapshots anzeigen
list-dependencies Unit-Datei Abhängigkeiten anzeigen
--failed fehlgeschlagenen Units
poweroff herunterfahren und abschalten
reboot neu starten
rescue Einbenutzermodus, Systemwartung
suspend Suspendmodus
isolate Target Betriebszustand wechseln
cat Unit Unit-Datei anzeigen
show Unit Eigenschaften der Unit-Datei auflisten

Viele Parameter erlauben es, über zusätzliche Angaben die Aktion zu präzisieren. Abbildung 4 zeigt ein komplett durchgespieltes Beispiel: Es geht darum, einen Dienst – in diesem Fall das RDBMS PostgreSQL – anzuhalten, zu maskieren und anschließend diese Maßnahme wieder rückgängig zu machen. Die Unit-Datei liegt dabei nicht unter /etc/systemd/system. Bei der Abfrage des Status finden Sie alle zum Dienst gehörenden Prozesse angegeben. Ferner zeigt der Aufruf den Status der Unit selbst und deren Laufzeit an.

Abbildung 4: Sind die einschlägigen Parameter erst einmal verinnerlicht, geht die Arbeit mit Systemctl vergleichsweise reibungslos von der Hand.

Eine Aufstellung aller Unit-Dateien erhalten Sie mittels systemctl list-unit-files (Abbildung 5). Neben den Zuständen enabled, disabled und masked finden Sie hier noch static: Es signalisiert, dass die entsprechende Unit-Datei nicht aktiviert ist und in der Sektion [Install] obendrein Anweisungen hierzu fehlen. Ein Steuern durch Systemctl gelingt daher nicht. Manchmal liegt hier ein Fehler vor; es gibt aber auch verschiedene plausible Gründe für den Zustand static: Eventuell ist die Unit in anderen Units unter .wants oder .requires eingetragen. Eine weitere Möglichkeit: Das System aktiviert sie per Socket, Timer, D-Bus oder Udev.

Abbildung 5: Unit-Dateien mit dem Status static weisen entweder einen Konfigurationsfehler auf, oder es handelt sich um Abhängigkeiten, die andere Unit-Dateien voraussetzen.

Systemd weist jeden Dienst, den es verwaltet, in eine eigene Cgroup ein. Mit dem Befehl systemctl-cgls sehen Sie auf einen Blick, welche Prozesse zu welcher Unit gehören. Sie erhalten damit eine Ansicht ähnlich der von Pstree (Abbildung 6).

Abbildung 6: Mit dem Befehl systemd-cgls sehen Sie auf einen Blick, zu welcher Cgroup und somit zu welchem Dienst ein Prozess gehört.

Das Programm Systemadm ermöglicht das schnelle und einfache Verwalten von Systemd und den Diensten. Mit dem Tool erledigen Sie per Mausklick im Prinzip die gleichen Aktionen wie mit Systemctl auf der Kommandozeile (Abbildung 7).

Abbildung 7: Systemadm erlaubt es, Systemd und die von diesem verwalteten Dienste via Mausklick zu steuern.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 9 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Systemstart
    Auf fast allen modernen Linux-Distributionen kümmert sich inzwischen Systemd um den Systemstart – und mehr. Wir erklären, wie die neue Schaltzentrale funktioniert.
  • Systemstart mit Systemd
    Einschalten, loslegen: Mit Systemd versucht eine Gruppe Entwickler die Revolution im Boot-Prozess. Ob der Turbo aber wirklich zündet, steht noch in den Sternen.
  • Systemd als Schaltzentrale für das Linux-System
    Systemd polarisiert die Community – und hat zugleich das Zeug dazu, alte Gräben zu schließen und eine einheitliche Basis für Linux zu bilden.
  • Upstart und Systemd im Vergleich
    Upstart und Systemd – gleich zwei neue Ansätze konkurrieren um die Pole-Position beim Linux-Start. Wir unterziehen die Kandidaten einem konzeptionellen Vergleich.
  • Systemd 209 freigegeben
    Die neue Version des Init-Systems bringt viele kleine Änderungen mit. So ist Systemd jetzt auf KDbus vorbereitet und übernimmt die Konfiguration von Netzwerkschnittstellen mit dem neuen Dienst Networkd.
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...