Dienste und systemd

Dienst scheitert vor dem Programmstart

Ein Dienst endet mit 203/EXEC, obwohl ein ähnlicher Shellbefehl funktioniert. Prüfe Programm, Interpreter, Mount-Optionen und Dienstkontext.

Auf dieser Seite
  1. Symptome und Geltungsbereich
  2. Mögliche Ursachen
  3. Sicher prüfen
  4. Nächste Schritte nach Befund
  5. Quellen und Prüfung
  6. Verwandte Probleme

Symptome und Geltungsbereich

  • Der Prozess meldet status=203/EXEC.
  • Die normale Startmeldung der Anwendung fehlt.

Betroffene Umgebung

systemd-Systemdienste; Interpreter- und Programmpfade hängen von der Distribution ab.

Erkennbare Meldungen (synthetische Beispiele)
systemd[1]: example.service: Main process exited, code=exited, status=203/EXEC

Prüfe die Voraussetzungen für execve vor der Anwendung selbst.

Mögliche Ursachen

Das sind mögliche Erklärungen, keine bestätigte Diagnose. Mehrere unabhängige Fehler können gleichzeitig vorliegen.

  • Ein veralteter ExecStart-Pfad, ein fehlender Interpreter oder ein ungeeignetes Binärformat kann execve verhindern.
  • Dateizugriff, noexec-Mounts oder Dienst-Root können vom Terminalkontext abweichen.

Sicher prüfen

Führe jeweils einen Befehl in der passenden Sitzung aus. Lies zuerst die Erklärung. Großgeschriebene Platzhalter brauchen deine Werte; Werkzeuge und Rechte unterscheiden sich je nach Distribution. Die Website zeigt Befehle an und führt sie niemals aus.

Prüfschritt 1

Ersetze example.service durch den betroffenen Dienst; normalerweise ohne erhöhte Rechte lesbar.

systemctl show example.service -p ExecStart -p RootDirectory -p User

Ergebnis einordnen: Prüfe das tatsächliche Programm statt eines Shell-Alias. RootDirectory verändert die für den Prozess sichtbaren Pfade.

Prüfschritt 2

Ersetze den Pfad durch das Programm aus ExecStart; der Befehl liest nur Pfadmetadaten.

namei -l /opt/example/bin/server

Ergebnis einordnen: Jedes Elternverzeichnis braucht Durchsuchungsrechte. Auch eine vorhandene Programmdatei benötigt ihren ELF-Loader oder Shebang-Interpreter.

Prüfschritt 3

Nutze dieselbe Unit; für das Systemjournal können administrative Leserechte erforderlich sein.

journalctl -b -u example.service --no-pager -n 60

Ergebnis einordnen: Die Meldung vor 203/EXEC unterscheidet fehlende Dateien, verweigerten Zugriff und Formatfehler; 203 allein tut das nicht.

Nächste Schritte nach Befund

Programmpfad oder Interpreter korrigieren

Wenn der protokollierte Pfad fehlt, richte ExecStart auf das installierte Programm. Verwende im Shebang einen im Dienst-Root verfügbaren Interpreter. Unter NixOS hinterlege den Paketpfad deklarativ.

Vorsicht: Bewahre frühere Unit und Argumente auf. ExecStart wird nicht automatisch durch eine Shell ausgeführt.

Wiederherstellung / Rücknahme: Stelle die vorherige Unit wieder her, lade den Manager neu und starte nur diesen Dienst zu einem passenden Zeitpunkt.

Hat dir dieser Hinweis geholfen?

Hinweis teilen#

Benötigte Ausführungsrechte herstellen

Wenn Durchsuchungsrechte oder noexec den Fehler erklären, erteile dem Dienstkonto gezielte Pfadrechte oder verlagere das Programm auf ein geeignetes Dateisystem. Prüfe Sicherheitsrichtlinien gesondert.

Vorsicht: Notiere vorher Eigentümer und Rechte. Öffne Anwendungsdaten nicht pauschal und ändere keine unbeteiligten Mounts.

Wiederherstellung / Rücknahme: Stelle notierte Rechte oder ursprünglichen Programmpfad und Dienstdefinition wieder her.

Hat dir dieser Hinweis geholfen?

Hinweis teilen#

Quellen und Prüfung

Diese Anleitung basiert auf Originalquellen von Projekten oder Distributionen und wurde am genannten Datum redaktionell geprüft. Das ist eine Quellenprüfung, kein Nachweis einer auf deiner Hardware reproduzierten Lösung. Log-Beispiele sind synthetische Testdaten. Versionsabhängige Details müssen zur installierten Ausgabe passen.