OS: Manjaro 19.1 (sicherlich)
systemd ist der erste Daemon-Prozess (PID: 1), der auf einem Linux-System gestartet wird. Startet andere Prozesse und wird zum Vorgängerprozess aller Prozesse. Es hat auch den Zweck, andere Daemon-Prozesse zu verwalten (daher).
Der Befehl systemctl
wird hauptsächlich verwendet, um systemd zu untersuchen und zu manipulieren.
Wenn Sie den Befehl systemctl
ausführen, wird eine Liste der Einheiten angezeigt (siehe unten).
$ systemctl
UNIT LOAD ACTIVE SUB DESCRIPTION
sys-module-fuse.device loaded active plugged /sys/module/fuse
-.mount loaded active mounted Root Mount
boot-efi.mount loaded active mounted /boot/efi
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running Login Service
[email protected] loaded failed failed User Manager for UID 1000
...
Laut Manpage zeigt der Befehl systemctl
(= Befehl
systemctl list-unit`)" die Liste der Einheiten an, die systemd im Speicher hält ".
Was ist eine Einheit?
Mit anderen Worten, es ist eine Objekteinheit, die von systemd verwaltet wird.
Geben Sie beispielsweise die Einheit wie unten gezeigt an und überprüfen Sie ihren Status.
$ systemctl status bluetooth.service
Der obige bluetooth.service
ist eine Einheit.
Sobald Sie einen Überblick bekommen.
Das Gerät scheint zum Beispiel Service (.service
), Einhängepunkt ( .mount
), Gerät (.device
), Socket ( .socket
) zu sein. (Ich verstehe hier nicht im Detail.)
Der vollständige Name der Einheit ist erforderlich, wenn der Befehl systemctl verwendet wird. Mit anderen Worten, das ist der vorherige "bluetooth.service".
Es gibt jedoch auch Regeln, nach denen Sie Abkürzungen verwenden können. Drei.
/ home
ist gleich home.mount
.
--device wird auch automatisch als .device
unit interpretiert. / dev / sda2
ist gleich dev-sda2.device
.Kehren Sie erneut zum vorherigen Befehl zurück. Das Ausgabeergebnis ist wie folgt.
$ systemctl status bluetooth.service
● bluetooth.service - Bluetooth service
Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2017-01-04 13:54:04 EST; 1 weeks 0 days ago
Docs: man:bluetoothd(8)
Main PID: 930 (bluetoothd)
Status: "Running"
Tasks: 1
Memory: 648.0K
CPU: 435ms
CGroup: /system.slice/bluetooth.service
└─930 /usr/lib/bluetooth/bluetoothd
Jan 12 10:46:45 example.com bluetoothd[8900]: Not enough free handles to register service
Jan 12 10:46:45 example.com bluetoothd[8900]: Current Time Service could not be registered
Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output error (5)
Die geladene Zeile zeigt "geladen" an, wenn das Gerät in den Speicher geladen ist. Andere Werte sind "Fehler", "Nicht gefunden", "Schlechte Einstellung", "Maskiert". Außerdem werden der Pfad der Einheitendatei und ob sie derzeit aktiviert ist (ob sie beim Booten gestartet wird) in Klammern angezeigt.
unit file
Hier kommt die Einheitendatei. Aus dem vorherigen Ausgabeergebnis geht hervor, dass bluetooth.service in /usr/lib/systemd/system/bluetooth.service definiert ist. (Wenn Sie sich die Datei tatsächlich ansehen, ist der Inhalt unerwartet einfach.)
Was die Einheitendatei betrifft, scheint es eine Manpage zu geben, werfen Sie also einen kurzen Blick darauf. (systemd.unit (5)
)
Es scheint, dass es verschiedene Richtlinien gibt, die aus mehreren Abschnitten bestehen.
Diese definieren wahrscheinlich die Einheit.
Außerdem befand sich / usr / lib / systemd / system / *
an der Stelle namens System Unit Search Path.
Es scheint, dass die Unit-Datei von bluetoooth.service unit in diesem Verzeichnis durchsucht wurde.
Wie auch immer, ich fand heraus, dass eine Einheitendatei mit demselben Namen wie die Einheit in einem bestimmten Verzeichnis abgelegt wurde und die Einheit in dieser Datei definiert wurde.
Nachdem ich herausgefunden habe, wie die Einheit von systemd verwaltet wird, werfen wir einen Blick auf bestimmte Befehle.
systemctl status <unit>
Der Ausführungsstatus, der Dateipfad der Einheit, die PID, das letzte Protokoll usw. werden angezeigt.
systemctl start <unit>
Startet sofort.
systemctl stop <unit>
Sofort aufhören.
systemctl enabled <unit>
Zum Aktivieren einstellen. (Zum Starten beim Start einstellen.)
systemd betrachtet die Einheitendatei in einem bestimmten Verzeichnis und verwaltet die Betriebseinheit Einheit. Diese können vom Benutzer mit dem Befehl systemctl verwaltet / bearbeitet werden.
Lassen Sie uns spielen, indem wir sehen, welche Art von Einheit funktioniert, und den Status überprüfen.
systemctl manpage
Arch Linux wiki https://wiki.archlinux.org/index.php/Systemd#Using_units
Understanding Systemd Units and Unit Files https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
Wikipedia https://en.wikipedia.org/wiki/Systemd
Recommended Posts