Der Standard-System- und Dienstmanager der meisten Linux-Distributionen ist heute systemd.

Der systemd-Prozess ersetzt das SysV-Init. Er wird als erster Prozess nach dem Booten des Kernels ausgeführt und ist dafür verantwortlich, den Linux-Host in einen Zustand zu versetzen, in dem er benutzt werden kann. Er ist für den Start und die Verwaltung der Dienste, das Mounten von Dateisystemen, die Verwaltung der Hardware, die Erzeugung der Anmeldeaufforderung und vieles mehr zuständig.

Ein entscheidender Vorteil gegenüber SysV ist, dass systemd so viele Dienste wie möglich parallel startet und damit den Startvorgang beschleunigt, so dass der Anmeldebildschirm schneller erscheint.

Einheiten

Die Elemente, die von systemd verwaltet werden, werden Units genannt. Die Unit-Dateien befinden sich in /lib/systemd/system.

Dienst-Einheiten

Bei der Verwaltung von Diensten handelt es sich bei den Zieleinheiten um Diensteinheiten, die über Unit-Dateien mit der Endung .service verfügen.

Verwaltung von systemd-Diensten

Der Befehl zur Verwaltung von systemd-Einheiten ist systemctl.

Starten und Stoppen von Diensten

Um einen systemd-Dienst zu starten, verwenden Sie den Befehl systemctl start:

$ sudo systemctl start name.service

Sie können die Endung .service weglassen. Um zum Beispiel den Apache-Server unter Ubuntu zu starten:

$ sudo systemctl start apache2

Um einen laufenden Dienst zu stoppen:

$ sudo systemctl stop name.service

Um also den Apache-Server unter Ubuntu zu stoppen:

$ sudo systemctl stop apache2

Neustart und Neuladen der Dienste

Um einen laufenden Dienst neu zu starten, verwenden Sie den Befehl restart:

$ sudo systemctl restart name.service

Und wenn nur das Neuladen der Konfigurationsdatei erforderlich ist

$ sudo systemctl reload name.service

Aktivieren und Deaktivieren von Diensten

Wenn Sie möchten, dass ein Dienst beim Systemstart automatisch gestartet wird, verwenden Sie den Befehl enable:

$ sudo systemctl enable name.service

Um den Start eines Dienstes beim Systemstart zu deaktivieren:

$ sudo systemctl disable name.service

Durch die Deaktivierung wird ein laufender Dienst nicht gestoppt.

Anzeigen des Dienststatus

Um Informationen über einen Dienst anzuzeigen:

$ sudo systemctl status name.service

Dies zeigt Ihnen den Status des Dienstes und die ersten Zeilen der Protokolldatei an. Während der Dienst also läuft, ist die Ausgabe von

sudo systemctl status apache2

ist

apache2.service - Der Apache HTTP-Server
   Geladen: geladen (/lib/systemd/system/apache2.service; aktiviert; Hersteller-Voreinstellung: aktiviert)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Aktiv: aktiv (läuft) seit Tue 2020-05-19 22:11:36 UTC; vor 4 Tagen
  Prozess: 116002 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Haupt-PID: 104165 (apache2)
    Aufgaben: 55 (Grenze: 1024)
   CGruppe: /system.slice/apache2.service
           ├─104165 /usr/sbin/apache2 -k start
           ├─116006 /usr/sbin/apache2 -k start
           └─116007 /usr/sbin/apache2 -k start

May 19 22:11:36 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Starten des Apache HTTP Servers...
May 19 22:11:36 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Der Apache HTTP Server wurde gestartet.
May 21 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Der Apache HTTP Server wird neu geladen.
May 21 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Der Apache HTTP Server wurde neu geladen.
May 22 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Der Apache HTTP Server wird neu geladen.

So überprüfen Sie, ob ein Dienst aktiv ist:

$ sudo systemctl is-active name.service

Während der Dienst apache2 läuft, lautet die Ausgabe des Befehls systemctl is-active also :

$ sudo systemctl is-active apache2
aktiv

Um zu überprüfen, ob ein Dienst aktiviert ist:

$ sudo systemctl is-enabled name.service.

Anzeigen des Systemstatus

Alle Befehle, die Sie bis jetzt gesehen haben, dienen der Verwaltung eines einzelnen Dienstes. Wenn Sie sich einen Überblick über den Systemstatus verschaffen wollen, verwenden Sie die folgende Befehlsgruppe:

Um alle Einheitentypen zu sehen

$ sudo systemctl -t help
Verfügbare Unit-Typen:
service
socket
ziel
gerät
mounten
automount
auslagern
timer
pfad
slice
bereich

Um alle installierten Einheiten aufzulisten, verwenden Sie list-unit-files

$ sudo systemctl list-unit-files
UNIT-DATEISTATUS          
proc-sys-fs-binfmt_misc.automount statisch        
-.mount generiert      
boot-efi.mount generiert      
dev-hugepages.mounten statisch        
dev-mqueue.mount statisch        
mnt.mount generiert      
proc-sys-fs-binfmt_misc.mount statisch        
sys-fs-fuse-connections.mounten statisch        
sys-kernel-konfig.einhängen statisch        
sys-kernel-debug.mount statisch        
acpid.path aktiviert        
apport-autoreport.pfad aktiviert        
systemd-ask-password-konsole.pfad statisch        
systemd-ask-password-plymouth.path statisch        
systemd-ask-password-wall.path statisch        
session-161.scope vorübergehend      
accounts-daemon.service aktiviert        

Die Ausgabe hat nur zwei Spalten Unit File und State. Der Status ist normalerweise aktiviert, deaktiviert, statisch oder maskiert.

  • Statisch: Das bedeutet, dass die Einheit nicht aktiviert werden kann, eine einmalige Aktion ausführt oder von einer anderen Einheit abhängig ist und nicht selbst ausgeführt werden kann.
  • Maskiert: Eine als maskiert aufgelistete Unit bedeutet, dass sie überhaupt nicht gestartet werden kann, da sie mit /dev/null verknüpft ist. Dies wird als Maskierung der Unit bezeichnet. Dadurch wird verhindert, dass der Dienst manuell oder automatisch gestartet werden kann.

Alle installierten Dienste auflisten

Der Befehl systemctl list-unit-files mit dem Filter -t oder -type service zeigt nur den Status der installierten Dienste an.

$ sudo systemctl list-unit-files -t service
STATUS DER EINHEITSDATEIEN    
accounts-daemon.service aktiviert  
acpid.service deaktiviert 
apache-htcacheclean.service deaktiviert 
apache-htcacheclean@.service deaktiviert 
apache2.service aktiviert  
apache2@.service deaktiviert 
apparmor.service aktiviert  
apport-autoreport.service statisch   
apport-forward@.service statisch   
apport.service generiert
apt-daily-upgrade.service statisch   
apt-daily.service statisch   
atd.service aktiviert  
autovt@.service aktiviert  
blk-availability.service aktiviert  
bootlogd.service maskiert   
bootlogs.service maskiert   

Um alle aktiven Diensteinheiten zu sehen, verwenden Sie list-units mit dem Filter -t service

$ sudo systemctl list-units -t service
UNIT LOAD ACTIVE SUB DESCRIPTION           
  accounts-daemon.service geladen aktiv läuft Konten Dienst      
  apache2.service geladen aktiv läuft Der Apache HTTP Server      
  apparmor.service geladen aktiv beendet AppArmor Initialisierung               
  apport.service geladen aktiv beendet LSB: automatische Erstellung von Absturzberichten  
  atd.service geladen aktiv läuft Aufgeschobener Ausführungszeitplaner            
  blk-availability.service loaded active exited Verfügbarkeit von Blockgeräten           
  cloud-config.service loaded active exited Anwenden der in cloud-con angegebenen Einstellungen
  cloud-final.service geladen aktiv beendet Ausführen von Cloud-Benutzer-/Final-Skripten        
  cloud-init-local.service geladen aktiv verlassen Initialer cloud-init Job (vor der Vernetzung) 
  cloud-init.service geladen aktiv verlassen Initialer Cloud-Init-Job (Metadaten-Service) 
  console-setup.service geladen aktiv beendet Konsolenschriftart und Tastaturbelegung festlegen         
  cron.service geladen aktiv läuft Regelmäßiges Hintergrundprogramm, das dae verarbeitet

Die Ausgabe enthält die folgenden Spalten:

  • UNIT: Der Name der systemd-Diensteinheit
  • LOAD: Zeigt an, ob die Unit-Definition richtig gelesen und geladen wurde
  • ACTIVE: Beschreibt, ob die Einheit aktiv ist.
  • SUB: Low-Level-Aktivierungsstatus der Einheit, der detailliertere Informationen über die Einheit liefert. Dies variiert je nach Einheitentyp.
  • DESCRIPTION: Die Beschreibung der Serviceeinheit.

Schlussfolgerung

Ich hoffe, Sie haben einen Eindruck von der Verwendung von systemctl zur Verwaltung von Diensten unter Linux bekommen. Wenn Sie mehr erfahren möchten, können Sie sich diesen Linux Mastery Kurs ansehen.