systemctl Fehler beim Starten des Dienstes, Ungültiges Argument

1855
CodeDezk

Ich muss beim Start eine Qt-Anwendung mit Root-Berechtigung ausführen. Unten ist das Skript, das ich mit systemctl erstellt habe QtApp.service

[Unit] Description=QtApp  [Service] ExecStart= exec su -l user -c 'export DISPLAY=:0; /QtInst/QtApp' Restart=always  [Install] WantedBy=multi-user.target 

Wenn ich jedoch den Befehl zum Starten des Dienstes ausführen, erhalte sudo systemctl start QtApp.serviceich einen Fehler

Failed to start QtApp.service: Unit QtApp.service is not loaded properly: Invalid argument. 

Hier sind die Details des Fehlers

systemctl status QtApp.service ● QtApp.service - QtApp Loaded: error (Reason: Invalid argument) Active: inactive (dead)  Jul 06 15:23:54 user-pc systemd[1]: [/etc/systemd/system/QtApp.service:5] Executable path is not absolute, ignoring: exec su -l user -c 'export DISPLAY=:0; /QtInst/QtApp' Jul 06 15:23:54 user-pc systemd[1]: QtApp.service: Service lacks both ExecStart= and ExecStop= setting. Refusing. Jul 06 15:26:08 user-pc systemd[1]: [/etc/systemd/system/QtApp.service:5] Executable path is not absolute, ignoring: exec su -l user -c 'export DISPLAY=:0; /QtInst/QtApp' Jul 06 15:26:08 user-pc systemd[1]: QtApp.service: Service lacks both ExecStart= and ExecStop= setting. Refusing. 
0

3 Antworten auf die Frage

0
Andy Powers

Der Fehler sagt

Executable path is not absolute, ignoring: exec su -l user -c 'export DISPLAY=:0; /QtInst/QtApp' 

Verwenden Sie den absoluten Pfad (z. B. / usr / local / QtInst / QtApp ) anstelle von / QtInst / QtApp .

Dies könnte relevant sein.

Die ausführbare Datei befindet sich tatsächlich in dem Ordner in / QtInst / ` CodeDezk vor 6 Jahren 0
Haben Sie versucht, das Leerzeichen nach ExecStart = zu löschen? und setze es in Anführungszeichen, ExecStart = "exec su -l user -c 'export DISPLAY =: 0; / QtInst / QtApp'" Andy Powers vor 6 Jahren 0
Nein, ich werde es versuchen CodeDezk vor 6 Jahren 0
0
Kamil Maciorowski

Executable path is not absolute- es bedeutet exec.

Im Allgemeinen execmacht es hier keinen Sinn. Es ist eine eingebaute Shell, die die Shell durch einen gegebenen Befehl ersetzt. Es gibt keinen absoluten Pfad zur execausführbaren Datei, da keine ausführbare Datei vorhanden ist.

su ist eine ausführbare Datei. Die Zeile kann sein

ExecStart=/bin/su -l user -c 'export DISPLAY=:0; /QtInst/QtApp' 

Imsu systemd-Service ist die Verwendung jedoch möglicherweise keine gute Idee. Siehe: Wie kann ich meinen systemd-Dienst über einen bestimmten Benutzer ausführen und beim Booten starten?

0
teejay

Im Allgemeinen ist das "ungültige Argument" hier die Einheitendefinitionsdatei. Zum Debuggen können Sie Folgendes verwenden:

sudo systemd-analyze verify QtApp.service 

oder im Falle eines lokalen Dienstes des Benutzers:

sudo systemd-analyze --user verify QtApp.service