Linux Bibel online

Creative Commons Lizenzvertrag
Dieses Werk ist lizenziert unter einer Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 3.0 Österreich Lizenz.

Change language by Google translator: ...

Systemd ist das neue Init-System unter Linux und hat vor allem bei der Einführung unter Debian GNU/Linux großen Wirbel ausgelöst, vor allem dadurch das Systemd so ziemlich alles rund um das System kontrolliert - manche meinen auch das durch Systemd das vor allem von Red Hat - einer kommerziellen Linux-Distribution - eine einzige Firma zu viel Kontrolle über Linux erhält. Doch Systemd ist open Source - mehr muss man dazu denke ich nicht sagen.
Nun was ist Systemd? Dazu muss man ein wenig in die Vergangenheit zurück greifen, die Dienste unter Linux sind ziemlich zahlreich, dazu zählen der Start von System-Diensten wie auch von Software wie etwa der Apache-Webserver oder auch Log-Dienste und vieles mehr. In der Vergangenheit nutzte man das so genannte Init-Protokoll, ein System das jeden dieser Dienste der Reihe nach und in folge auch nach Abhängigkeiten gestartet hatte, dies dauerte natürlich seine Zeit. Systemd wiederum kann mehrere Dienste zur selben Zeit starten und noch dazu ohne auf Abhängigkeiten zwischen Diensten zu achten, dies beschleunigt den Prozess des Startens des Betriebssystems massiv. So startet ein aktuelles Debian in rund 7 bis 8 Sekunden in einen voll funktionsfähigen Desktop.
Durch die Einführung von Systemd haben sich aber auch so einige Befehle rund um das System geändert (die meisten alt bekannten funktionieren zwar immer noch, werden aber langsam und sicher durch die neuen ersetzt). Hier muss man gleich einmal beschreiben das der einfache Nutzer damit nichts zu tun hat, mit Systemd kommen eigentlich nur Administratoren in Verbindung die mehr als nur einen normalen Desktop-Rechner haben wollen. Nun, die wichtigsten Befehle aus diesem neuen Init-System wollen wir jetzt ein wenig näher kennen lernen.

Dienste anzeigen

Als erstes möchte der Administrator natürlich wissen welche Dienste auf seinem System laufen, wichtig - Systemd nutzt nur der Nutzer "root". Um sich nun alle laufenden Dienste anzusehen nutzt man:

systemctl

Systemd - alle laufenden Dienste anzeigen

Systemd - alle laufenden Dienste anzeigen

Somit wird eine Übersicht über alle laufenden Dienste angezeigt, mit der Eingabe-Taste oder mit den Pfeil-Tasten (rauf / runter) blättert man weiter. Hierbei zeigen sich jedoch nicht nur Dienste - mit der Endung ".service" sondern auch noch einige weitere, so etwa ".device" das mit Geräte-Dateien arbeitet, ".mount" das Partitionen einhängt, ".socket" das Verbindungen zwischen einzelnen Prozessen her stellt und ".timer" das ähnlich wie Cron Aufgaben erledigen kann. Es gibt noch einige weitere mit denen der einfach Nutzer jedoch wenig zu tun hat. Hinter jedem Dienst steht eine kurze Status-Meldung sowie eine kurze Beschreibung wozu der Dienst eigentlich gut ist. Mittels der Taste q wird die Ansicht beendet.
Ist uns diese Übersicht über alles möglich zu viel lassen wir uns nur die eigentlichen Dienste anzeigen, dazu nutzt man die Option "--type=" und den gewünschten Begriff, in unserem Fall also "service":

systemctl --type=service

Systemd - alle laufenden Dienste anzeigen

Systemd - alle laufenden Dienste anzeigen

Dienste aktivieren / deaktivieren

Da es ein Init-System ist lassen sich damit natürlich auch beliebige Dienste aktivieren und deaktivieren, als kleines Beispiel hat sich der Nutzer den Apache-Webserver installiert um Webseiten zu testen bevor er sich diese auf den Server tatsächlich in das Internet stellt. So benötigt er den Server natürlich nur dann wenn er auch wirklich Seiten testen will.
Im Beispiel habe ich nun Virtualbox installiert um andere Linux-Systeme auszuprobieren, brauche ich natürlich nur dann wenn ich solche auch gerade probieren will, ich sehe mir also mit einem der voran gegangenen Befehle an wie sich der Dienst nennt - in diesem Fall "virtualbox.service", damit dieser nicht automatisch mit dem System startet - also extra Strom vom Akku benötigt nutze ich "systemctl disable inklusive den gewünschten Dienst - also:

systemctl disable virtualbox.service

Möchte ich den Auto-Start mit dem System dann doch wieder aktivieren nutzt man statt "disable" natürlich "enable":

systemctl enable virtualbox.service

Dienste stoppen / Starten / neu Starten

Hat man einen Dienst für den Auto-Start deaktiviert und benötigt diesen muss man diesen natürlich starten können, dies läuft ganz einfach, etwa frei nach meinem Beispiel oben:

systemctl virtualbox.service start

Will man ihn wieder stoppen ersetzt man "start" durch "stop" oder für einen Neustart (etwa weil man die Konfiguration geändert hat) "restart".

Status von Diensten genauer ansehen

Ganz oben haben wir schon gesehen das Systemd eine kurze Status-Meldung zu jedem Dienst in der Übersicht anzeigt, wie schon beschrieben ist diese Meldung schon sehr kurz. Um sich diese Meldung etwas genauer anzusehen nutzt man einfach - nach meinem kleinen Beispiel:

systemctl status virtualbox.service

Status von Diensten unter Systemd anzeigen lassen

Status von Diensten unter Systemd anzeigen lassen

Zustand des Systems ändern

Mittels Systemd lässt sich natürlich wie es sich gehört auch der Zustand des Systems ändern, so etwa durch "poweroff" herunter fahren, durch "reboot" neu starten, durch "suspend" in Bereitschaft versetzen und durch "hibernate" in den Ruhezustand versetzen, als kleines Beispiel:

systemctl poweroff

Log-Dateien betrachten

Log-Dateien sind unter Linux natürlich ein besonderes Thema, das System ist freizügig und meldet eigentlich so ziemlich alles, angefangen bei Fehlern, positive Geschichten, wenn die Firewall jemanden ausgebremst hat oder auch nur wenn man ein Gerät anschließt. Auch hier zeigt Systemd alles was der Nutzer brauchen könnte.

Das komplette Log anzeigen Folgender Befehl zeigt alles was das ganze System inklusive Kernel seit dem letzten Start des Systems aufgezeichnet hat:

journalctl -b

Es beginnt mit dem ersten Log das aufgezeichnet wurde, mittels der Eingabe-Taste oder der Pfeil-Nach-Unten-Taste scrollt man weiter. Mittels der Taste q kommt man direkt wieder an den Eingabe-Prpmpt.

Das komplette Log rückwärts Wie der letzte Befehl, jedoch in umgekehrter Reihenfolge - das letzte Log wird also zuerst angezeigt:

journalctl -b -r

Log live betrachten Die wohl gebräuchlichste Methode die früher durch den Befehl "tail -f /var/log/messages" genutzt wurde, neue Log-Meldungen werden live angezeigt:

journalctl -f

Mittels der Tastenkombination "Strg + C" beendet man die Ausgabe wieder.

Nur Log-Dateien des Kernels anzeigen Bisherige Befehle zeigten alle Log-Meldungen des kompletten Systems an, folgende Option zeigt nur solche des Kernels an - damals nutzte man "dmesg":

journalctl -k

Meldungen ab einem bestimmten Datum anzeigen Um sich die Meldungen ab einem bestimmten Tag anzuzeigen gibt man dieses einfach nach der Syntax "JJJJ-MM-TT HH:MM:SS" an, also etwa:

journalctl --since 2016-05-12 14:00:00

Meldungen nach Priorität anzeigen lassen Zu jeder Log-Meldung in den Log-Dateien wird die Priorität hinzu gefügt, natürlich kann man sich auch nur gewünschte anzeigen lassen. Die Prioritäten: emerg, alert, crit, err, warning, notice, info und debug:

journalctl -p err

Ältere Log-Dateien anzeigen Standardmäßig erhält man nur die Logs seit dem letzten Start des Systems, außer man gibt etwa das Datum an. Kennt man jedoch nicht das Datum hat man natürlich Probleme - nein, es gibt eine weitere Möglichkeit. Mittels:

journalctl --list-boots

erhalten Sie eine Liste aller System-Starts seit der Installation:

System-Logs seit der System-Installation anzeigen

System-Logs seit der System-Installation anzeigen

Vor jedem Eintrag sehen Sie eine Nummer, ganz hinten das Datum und Uhrzeit wie lange das Log läuft. Als Beispiel möchte ich mir nun die Nummer "9" ansehen:

journalctl -b 9

Log-Dateien durchsuchen Auch die Möglichkeit die Ausgaben von Log-Dateien zu durchsuchen besteht natürlich noch immer. Wie damals übergibt man die Ausgabe per Pipe "|" ganz einfach an Grep. Im Beispiel möchte ich ganz einfach nach Einträgen von "modem" suchen:

journalctl -b | grep -i modem

Runlevel ändern

Es gibt unter Linux fünf Runlevel, Runlevel "0" bedeutet das System ist abgeschaltet oder fährt dieses herunter, Runlevel "1" - hier läuft das System ohne grafische Oberfläche und ohne Netzwerk (gut für Wartung) des Systems, Runlevel "2" ist derzeit nicht besetzt, "3" ist ebenfalls noch ohne grafische Oberfläche jedoch mit Netzwerk - etwa ideal um manuell proprietäre Grafikkarten-Treiber zu installieren (NVIDIA) auch Server und dergleichen laufen hier schon, Runlevel "5" ist der Standard-Modus - also mit grafischer Oberfläche und Netzwerk, Runlevel "6" startet das System wiederum neu.

Den Runlevel wiederum ändert man im nicht eingeloggten Zustand, also am Login-Bildschirm, man wechselt auf das virtuelle Terminal mit der Tastenkombination "Strg + Alt + F1" und nutzt nun den Befehl:

systemctl isolate runlevel3.target

Die restlichen Runlevels wären also "runlevel1.target runlevel2.target runlevel4.target runlevel5.target runlevel6.target".

Seit Systemd gibt es nun auch weitere Runlevel - welche dies sind zeigt der Befehl:

systemctl list-units --type=target

Eine Beschreibung findet sich gleich inbegriffen, jedoch finden sich hier unsere alten Runlevels nicht mehr:

Systemd - Runlevels

Systemd - Runlevels

Der Beschreibung nach erkennt man jedoch deren Sinn - unser Runlevel 5 wäre in diesem Fall der Runlevel "multi-user.target".

Journal-Größe ändern

Wie wir nun schon wissen loggt Systemd alles seit der Installation des Systems. Das Log wächst somit natürlich mit der Zeit und verschlingt immer mehr Platz. Die Größe des Logs lässt sich natürlich in Grenzen halten. Dazu editiert man als Administrator die Datei "/etc/systemd/journald.conf". Hier sucht man die Zeile:

#SystemMaxUse=

Man entfernt die Raute (#) und fügt die gewünschte Größe in Megabyte an, etwa für 512MB:

SystemMaxUse=512M

Nach einem Neustart des Systems sind die Einstellungen aktiv.

Selbst Logs einfügen

Möchte man selbst Log-Meldungen einfügen, etwa bei der Ausführung von eigenen Scripts ist auch dies problemlos möglich. Die nötigen Zeilen:

echo 'Ihre gewünschte Meldung' | systemd-cat -t someapp -p info

Statt "Ihre gewünschte Meldung" geben Sie den gewünschten Text ein. Kleines Beispiel als Ausgabe für diese Zeile im Log:

Aug 10:06:26 rechner-name someapp[Prozess-ID]: Ihre gewünschte Meldung

Statt "info" lässt sich auch "warning" einsetzen was jedoch die selbe Zeile erzeugen würde aber auch "emerg" was schon eine eindringlichere Meldung erzeugen würde:

Broadcast message from systemd-journald@rechner-name (Mo 2016-08-08 10:06:26 CEST): someapp[Prozess-ID]: Ihre gewünschte Meldung

"someapp" ersetzen Sie wenn gewünscht ganz einfach durch den Namen Ihres Scripts.

Bootcharts und ähnliches

Systemd beinhaltet natürlich auch nötige Software um sich diverse Charts anzusehen um etwa den Start des Systems zu optimieren oder Problemezu finden. Das nötige Kommando nennt sich dazu "systemd-analyze"

Zeit anzeigen bis das System benutzbar ist Die folgende Option zeigt an wie lange das System benötigt hat bis es tatsächlich benutzbar wurde, also vollständig bereit ist:

systemd-analyze

Systemd - Zeit des System-Starts anzeigen

Systemd - Zeit des System-Starts anzeigen

Start-Zeit der einzelnen Komponenten anzeigen Um sich die Zeit anzusehen die die einzelnen Komponenten zum Start benötigt haben nutzen wir:

systemd-analyze blame

Start-Zeit der einzelnen Dienste ansehen

Start-Zeit der einzelnen Dienste ansehen

Start-Zeit nach Abhängigkeiten ansehen Ja, man muss auch zu geben das es unter Systemd einige Abhängigkeiten unter den einzelnen Diensten gibt, wollen wir uns also ansehen welche Dienste auf andere warten mussten um tatsächlich gestartet zu werden:

systemd-analyze critical-chain

Systemd - Welche Dienste brauchten warum so lange

Systemd - Welche Dienste brauchten warum so lange

Die ganze Geschichte grafisch ausgeben Diese ganze Geschichte lässt sich natürlich auch grafisch ausgeben - jedoch nur im SVG-Format, die Datei lässt sich jedoch in jedem Webbrowser öffnen. Als Beispiel möchte ich die Datei "speed.svg" erstellen:

systemd-analyze plot > speed.svg

speed.svg - hier ein kleines Beispiel aus meiner alten Dell E5500.

Wie man sieht ist Systemd keinesfalls schwierig zu nutzen - ein wirkliches Umdenken vom alten System in nicht nötig, vieles wurde sogar einfacher.

Log-Dateien begrenzen

Alle Log-Dateien von Systemd liegen im System-Verzeichnis unter "/var/log/journal", es gibt hier keine Begrenzung, die Daten werden über Jahre hinweg hier gesammelt und die Dateien nehmen natürlich irgendwann unhandliche Größen an. Dies mag natürlich ein Vorteil sein da man hier nun wirklich alles von Beginn gespeichert hat - ist aber nicht im Sinne jeden Nutzers. Möchte man die Log-Dateien auf eine beliebige Größe begrenzen, egal ob dies an der Datei-Größe oder an einer bestimmten Zeit gehandelt werden soll - alles ist möglich. Die Einstellungen für die Größe liegen nun in der System-Datei "/etc/systemd/journald.conf" und unter auf nicht auf Debian basierenden Systemen auch hin und wieder in der Datei "/etc/systemd/journal.conf". Ein kleines Beispiel:

[Journal] #Storage=auto #Compress=yes #Seal=yes #SplitMode=uid #SyncIntervalSec=5m #RateLimitIntervalSec=30s #RateLimitBurst=1000 #SystemMaxUse=#Angabe in MB wie groß die Logs wirklich sein dürfen #SystemKeepFree=#Angabe in MB wie viel Platz auf dem System frei bleiben muss #SystemMaxFileSize= #SystemMaxFiles=100 #RuntimeMaxUse= #RuntimeKeepFree= #RuntimeMaxFileSize= #RuntimeMaxFiles=100 #MaxRetentionSec= #MaxFileSec=1month #ForwardToSyslog=yes #ForwardToKMsg=no #ForwardToConsole=no #ForwardToWall=yes #TTYPath=/dev/console #MaxLevelStore=debug #MaxLevelSyslog=debug #MaxLevelKMsg=notice #MaxLevelConsole=info #MaxLevelWall=emerg

Um Einträge zu ändern entfernen Sie die Raute "#" vor dem Eintrag und setzen die Größe in Megabyte dahinter ein, dies funktioniert natürlich nur als Nutzer root. Möchten Sie Log-Dateien überhaupt nicht speichern ändern Sie den Eintrag "Storage", entfernen also die Raute davor und ersetzen den Eintrag "auto" durch "volatile", nun werden die Logs zwar aktuell gespeichert - beim nächsten Neustart des Systems aber gelöscht. Mehr Infos rund um diese Datei erhalten Sie als Administrator auf dem Terminal über die Manpage durch den Befehl:

man journald.conf

Etwas einfacher gelingt das Steuern der Größe der Log-Dateien über kurze Befehle auf dem Terminal - natürlich wie üblich als Nutzer root, mit folgendem Befehl veranlasse ich etwa das System dazu die Größe der Logs auf 500 Megabyte zu begrenzen:

journalctl --vacuum-size=500M

Im selben Moment werden alle alten Einträge gelöscht bis die Datei auf 500MB verkleinert wird, wird die Datei wieder größer werden wieder ältere Einträge gelöscht. Mit dem weiteren Beispiel:

journalctl --vacuum-time=1week

werden alle Einträge bis auf die der letzten Woche gelöscht und auch die zukünftige Größe auf einer aktuellen Woche gehalten, weiter wäre natürlich etwa "6month" oder "10year" und so weiter möglich.

Um sich die Größe der Log-Dateien aktuell anzusehen muss man nicht mit dem Dateimanager in das Log-Verzeichnis wechseln - es genügt wie üblich als Nutzer root der Befehl am Terminal:

journalctl --disk-usage

Kleines Beispiel:

Die Größe der Log-Dateien von Systemd unter Linux ansehen

Die Größe der Log-Dateien von Systemd unter Linux ansehen

Suche Nach oben Startseite Mail an den Autor Links rund um Linux

SiteLock