Unter Systemd haben wir bereits einen kleinen Einstieg in die Steuerzentrale für Linux bekommen – hier gehen wir jetzt etwas weiter.
Die meisten Befehle, solange sie das System betreffen, werden natürlich als root abgegeben – also los, ran ans Terminal:
Inhaltsverzeichnis
Services:
Services, also Dienste, sind wohl die wichtigsten Komponenten unter Systemd. Services sind Software oder Prozesse. Beispielsweise eine Datenbank, wie etwa MariaDB. Lassen wir uns diese Services einmal auflisten:
systemctl --type=service
Die Spalte „UNIT“ zeigt uns den Service-Namen, meist ist dieser mit der zugehörigen Software recht passend. Die Spalte „LOAD“ zeigt uns den Status beim Start des Systems – „loaded“ zeigt uns – das Service wird beim Systemstart gestartet. „ACTIVE“ zeigt uns wiederum, der Service soll auch beim Start des Systems starten – Sie können einen Service ja auch manuell starten. „SUB“ bietet uns die Information, ob der Service aktuell läuft oder auch nicht – „running“ läuft, „exited“ – läuft natürlich nicht – ein Service muss ja nicht dauerhaft laufen. „DESCRIPTION“ zeigt uns wiederum eine kurze Beschreibung.
Wir können einen Service starten:
systemctl start mariadb.service
Einen solchen natürlich auch stoppen:
systemctl stop mariadb.service
Diesen neu starten:
systemctl restart mariadb.service
Bei manchen Services ist es auch möglich, dessen Konfiguration neu zu laden, ohne diesen neu zu starten (ein Neustart dauert meist länger), dies ist nicht bei allen Services möglich – es wird einfach ein Fehler gemeldet:
systemctl reload mariadb.service
Wir können den automatischen Start mit dem System aktivieren (diese Einstellung wird beim nächsten Start / Neustart aktiv):
systemctl enable mariadb.service
Oder auch deaktivieren:
systemctl disable mariadb.service
Die funktioniert natürlich auch sofort ohne Neustart:
systemctl enable --now mariadb.service
systemctl disable --now mariadb.service
Wir können uns auch den Status des Service anzeigen lassen:
systemctl status mariadb.service
Standardmäßig werden uns mit systemctl --type=service
nur die geladenen Services angezeigt, nutzen Sie zusätzlich die Option --all
, sehen Sie wirklich alle:
systemctl --type=service --all
Sockets
Neben den Services existieren auch sogenannte Sockets – Sockets dienen so mancher Software zur Kommunikation innerhalb des Systems. So gesehen, das Betriebssystem interne Netzwerk. Lassen wir uns diese anzeigen:
systemctl --type=socket
Und jetzt alle:
systemctl --type=socket --all
Gesteuert werden die Sockets, wie die Services.
Targets:
Targets sind so gesehen die aktuellen Zustände des Betriebssystems, solche Zustände wäre etwa der Multi-User-Target – der Standard, mit Netzwerk und grafischer Oberfläche, der Reboot-Target – startet das System neu, der Shutdown-Target – fährt das Betriebssystem herunter und viele mehr – lassen wir uns diese anzeigen:
systemctl --type=target
Auch hier – es werden uns nur die aktiven Targets angezeigt – mit der Option --all
sehen wir alle:
In meinem Beispiel ist etwa der hibernate.target, suspend.target und weitere nicht aktiv – ich brauche diese einfach nicht. Will ich diese aktivieren – dieselbe Geschichte, wie bei den Services:
systemctl enable hibernate.target
systemctl enable --now hibernate.target
...
Wollen wir uns einmal ansehen, welcher Target standardmäßig startet:
systemctl get-default
Das System startet also standardmäßig in den graphical Target. Ist das System etwa gerade im suspend-then-hibernate.target – also im Schlafmodus und die GUI will aus welchem Grund auch immer nicht wieder aufstehen:
systemctl graphical.target
Mit der Option set-default
können Sie wiederum das Standard-Target ändern – in diesem Beispiel soll das System nur in das Terminal starten – also ohne GUI:
systemctl set-default multi-user.target
Weiteres:
Wir können uns ansehen, welche Prozesse zum einem Service gehören:
systemd-cgls -u mariadb.service
Wir können uns auch die Log-Meldungen nur für einen Service anzeigen lassen:
journalctl -u mariadb.service
Wir können uns auch die Konfigurationsdatei eines Services, eines Sockets oder eines Targets anzeigen lassen, ohne den Pfad zur Datei anzugeben:
systemctl cat mariadb.service
Auch können wir uns ansehen, welche Abhängigkeiten ein Service hat:
systemctl list-dependencies mariadb.service
Oder auch alles, was einen Service betrifft:
systemctl show mariadb.service
Mit folgendem Befehl lassen wir uns alle Service-, Socket- und Target-Dateien anzeigen:
systemctl list-unit-files
Sie können auch ein Service, Socket oder Target dazu bringen, überhaupt nicht zu starten – auch wenn es etwa jemand anderes starten will:
systemctl mask mariadb.service
Jetzt lässt sich das Service auch mit:
systemctl start mariadb.service
nicht starten, auch nicht automatisch, … In der Ausgabe des Befehls systemctl list-unit-files
, sind solche dann mit masked markiert. Diese Beschränkung können Sie mit folgendem Befehl wieder aufheben:
systemctl unmask mariadb.service
Die meisten Benutzer editieren die Dateien der Units (Services, Sockets und Targets) mit einem Editor – hierzu muss man natürlich auch den Pfad zur Datei angeben – umständlich. Will ich zu einer solchen Datei etwas hinzufügen:
systemctl edit mariadb.service
Die passende Datei wird geöffnet – aber nicht direkt bearbeitet. Es wird ein Verzeichnis im Verzeichnis mit der Datei erstellt – im Beispiel also „mariadb.service.d“ und die hinzugefügten Änderungen darin abgelegt. Möchten Sie die Datei direkt bearbeiten – also bestehenden Einstellungen ändern, nutzen Sie die Option --full
:
systemctl edit --full mariadb.service
Nach dem Ändern an Dateien und Verzeichnissen sollte immer folgender Befehl erfolgen:
systemctl daemon-reload
Anschließend wird das Service selbst neu geladen oder gestartet – also etwa:
systemctl reload mariadb.service
systemctl restart mariadb.service
Noch keine Reaktion