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
Autor
REXE Teknoloji Network & Security Team
Redaktion
REXE Teknoloji Technical Editorial
Erstveröffentlichung
Letzte Aktualisierung

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.

Häufig gestellte Fragen

Was ist der Unterschied zwischen systemctl enable und start?

'enable' markiert den Dienst für den automatischen Start beim Booten, startet ihn aber nicht sofort. 'start' startet den Dienst sofort, aber er startet beim Neustart nicht automatisch. Verwenden Sie 'systemctl enable --now dienstname' für beides gleichzeitig.

Was soll ich nach dem Ändern einer Unit-Datei tun?

Führen Sie nach dem Ändern einer Unit-Datei immer 'sudo systemctl daemon-reload' aus. Starten Sie dann den Dienst mit 'sudo systemctl restart dienstname' neu. Ohne daemon-reload werden Änderungen nicht wirksam.

Wie überwache ich Dienstprotokolle in Echtzeit?

Verwenden Sie 'sudo journalctl -u dienstname -f' für Echtzeit-Protokollverfolgung. Fügen Sie '-n 100' hinzu, um zuerst die letzten 100 Zeilen zu sehen. Verwenden Sie '-p err', um nur Fehlermeldungen zu filtern.

Ein Dienst stürzt immer wieder ab. Wie debugge ich ihn?

Beginnen Sie mit 'sudo systemctl status dienstname -l' für detaillierten Status. Prüfen Sie dann 'sudo journalctl -u dienstname -n 50' für aktuelle Protokolle. Validieren Sie die Unit-Datei mit 'sudo systemd-analyze verify'.

Soll ich systemd-Timer oder Cron verwenden?

Systemd-Timer sind moderner und integrierter: Sie protokollieren in journald, unterstützen Abhängigkeitsverwaltung und sind mit 'systemctl list-timers' einfach zu überwachen. Für einfache Aufgaben ist Cron ausreichend, für Aufgaben mit Dienstabhängigkeiten bevorzugen Sie systemd-Timer.

Verwandte Artikel

NetzwerkverkehrEingehend GbpsAusgehend Gbps