Zum Hauptinhalt springen
Zurück zur Kategorie

Systemd Dienstverwaltung: start, stop, enable Anleitung

Vollständige Anleitung zu systemctl-Befehlen, Service-Unit-Dateien, benutzerdefinierten Diensten, journalctl-Protokollüberwachung und systemd-Fehlerbehebung auf Linux-Servern.

Lesezeit: 12 min Serververwaltung
systemdsystemctldienstlinuxjournalctlunit filedaemon

Inhaltsverzeichnis

Systemd Dienstverwaltung: start, stop, enable Anleitung

Systemd ist das Init-System und der Dienst-Manager, der von den meisten modernen Linux-Distributionen verwendet wird. Auf Ubuntu, Debian, CentOS, AlmaLinux und RHEL übernimmt systemd alles vom Systemstart bis zur Dienstverwaltung. Diese Anleitung behandelt systemctl-Befehle, Unit-Dateien und die Erstellung benutzerdefinierter Dienste.

Was ist Systemd?

Systemd ist der erste Prozess, der nach dem Linux-Kernel gestartet wird (PID 1). Seine Aufgaben umfassen:

  • Starten und Stoppen von Systemdiensten
  • Verwalten von Abhängigkeiten zwischen Diensten
  • Sammeln von Systemprotokollen (journald)
  • Überwachen des Systemzustands

Systemd hat das ältere SysV-Init-System ersetzt. Obwohl /etc/init.d/-Skripte noch funktionieren, sind systemd-Unit-Dateien jetzt der bevorzugte Ansatz.

Grundlegende systemctl-Befehle

Dienststatus prüfen

hljs bash
# Dienststatus anzeigen
sudo systemctl status nginx

# Prüfen ob Dienst läuft
sudo systemctl is-active nginx

# Prüfen ob Dienst aktiviert ist
sudo systemctl is-enabled nginx

# Alle laufenden Dienste auflisten
sudo systemctl list-units --type=service --state=running

# Fehlgeschlagene Dienste auflisten
sudo systemctl list-units --type=service --state=failed

Dienste starten und stoppen

hljs bash
# Dienst starten
sudo systemctl start nginx

# Dienst stoppen
sudo systemctl stop nginx

# Dienst neu starten (stoppen + starten)
sudo systemctl restart nginx

# Dienstkonfiguration neu laden ohne zu stoppen
sudo systemctl reload nginx

# Neu laden wenn möglich, sonst neu starten
sudo systemctl reload-or-restart nginx

Dienste aktivieren und deaktivieren

hljs bash
# Dienst beim Systemstart aktivieren
sudo systemctl enable nginx

# Dienst starten und beim Boot aktivieren
sudo systemctl enable --now nginx

# Automatischen Start deaktivieren
sudo systemctl disable nginx

# Dienst stoppen und deaktivieren
sudo systemctl disable --now nginx

# Dienst maskieren (verhindert Start)
sudo systemctl mask nginx

# Maskierung aufheben
sudo systemctl unmask nginx

Systemd Unit-Dateien

Unit-Dateien definieren, wie systemd Dienste verwaltet. Es gibt zwei Hauptspeicherorte:

  • /lib/systemd/system/ — Vom Paketmanager installierte Unit-Dateien
  • /etc/systemd/system/ — Vom Systemadministrator erstellte/angepasste Unit-Dateien
hljs bash
# Unit-Datei eines Dienstes anzeigen
sudo systemctl cat nginx

# Speicherort der Unit-Datei finden
sudo systemctl show nginx --property=FragmentPath

# Alle Unit-Dateien auflisten
sudo systemctl list-unit-files --type=service

Unit-Datei-Struktur

Eine .service-Unit-Datei hat drei Hauptabschnitte:

hljs ini
[Unit]
Description=Nginx HTTP Server
After=network.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Benutzerdefinierten Dienst erstellen

Beispiel: Node.js-Anwendungsdienst

hljs bash
# Unit-Datei erstellen
sudo nano /etc/systemd/system/myapp.service
hljs ini
[Unit]
Description=My Node.js Application
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/node /var/www/myapp/app.js
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
Environment=NODE_ENV=production
Environment=PORT=3000

[Install]
WantedBy=multi-user.target
hljs bash
# Systemd über neue Unit-Datei informieren
sudo systemctl daemon-reload

# Dienst starten und aktivieren
sudo systemctl enable --now myapp

# Status prüfen
sudo systemctl status myapp

Protokollverwaltung mit journalctl

hljs bash
# Protokolle eines bestimmten Dienstes anzeigen
sudo journalctl -u nginx

# Letzte 50 Zeilen anzeigen
sudo journalctl -u nginx -n 50

# Protokolle in Echtzeit verfolgen
sudo journalctl -u nginx -f

# Protokolle der letzten Stunde
sudo journalctl -u nginx --since "1 hour ago"

# Nur Fehlerprotokolle
sudo journalctl -u nginx -p err

# Protokoll-Speicherplatz prüfen
sudo journalctl --disk-usage

# Alte Protokolle bereinigen
sudo journalctl --vacuum-time=2weeks

Fehlerbehebung

Dienst startet nicht

hljs bash
# Detaillierten Status abrufen
sudo systemctl status myapp -l

# Aktuelle Protokolle prüfen
sudo journalctl -u myapp -n 100 --no-pager

# Unit-Datei validieren
sudo systemd-analyze verify /etc/systemd/system/myapp.service

daemon-reload vergessen

hljs bash
# Immer nach dem Ändern einer Unit-Datei ausführen
sudo systemctl daemon-reload

Beginnen Sie bei der Entwicklung eines Dienstes mit Type=simple und Restart=on-failure. Optimieren Sie andere Einstellungen, sobald der Dienst stabil ist.

Systemd Timer (Cron-Alternative)

hljs ini
[Unit]
Description=Daily Backup Timer

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
hljs bash
# Timer aktivieren
sudo systemctl enable --now backup.timer

# Alle Timer auflisten
sudo systemctl list-timers

Fazit

Systemd ist der Grundstein der modernen Linux-Serververwaltung. Das Erlernen von systemctl-Befehlen und der Unit-Datei-Struktur ermöglicht eine zuverlässige Dienstverwaltung. Auf REXE-Servern können Sie benutzerdefinierte Dienste erstellen, damit Ihre Anwendungen nach Systemneustarts automatisch starten.