systemctl 启动服务失败,参数无效

systemctl 启动服务失败,参数无效

我需要在启动时以 root 权限运行 Qt 应用程序,下面是我使用 systemctl 创建的名为QtApp.service

[Unit]
Description=QtApp

[Service]
ExecStart= exec su -l user -c 'export DISPLAY=:0; /QtInst/QtApp'
Restart=always

[Install]
WantedBy=multi-user.target

但是当我运行命令启动服务时sudo systemctl start QtApp.service出现以下错误

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

以下是错误的详细信息

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.

答案1

Executable path is not absolute- 它的意思是exec

通常exec在这里没有意义。它是一个 shell 内置命令,用给定的命令替换 shell。没有exec可执行文件的绝对路径,因为没有可执行文件。

su 可执行文件。该行可能

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

在 systemd 服务中使用su可能不是一个好主意。请参阅:如何让我的 systemd 服务通过特定用户运行并在启动时启动?

答案2

通常,这里的“无效参数”是单元定义文件本身。要调试它,您可以使用:

sudo systemd-analyze verify QtApp.service

或者对于用户的本地服务:

sudo systemd-analyze --user verify QtApp.service

答案3

错误说

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

尝试使用绝对路径(例如在/usr/本地/QtInst/QtApp) 代替/QtInst/QtApp

可能是相关的。

相关内容