systemctl Не удалось запустить службу, неверный аргумент

2763
CodeDezk

Мне нужно запустить приложение Qt при запуске с правами root, ниже приведен скрипт, который я создал с использованием 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. 
0

3 ответа на вопрос

0
Andy Powers

Ошибка говорит

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

Попробуйте использовать абсолютный путь (например, / usr / local / QtInst / QtApp ) вместо / QtInst / QtApp .

Это может быть актуально.

На самом деле исполняемый файл находится в папке в `/ QtInst /` CodeDezk 5 лет назад 0
Вы пытались удалить пробел после ExecStart =? и установите его в кавычки, ExecStart = "exec su -l user -c 'export DISPLAY =: 0; / QtInst / QtApp'" Andy Powers 5 лет назад 0
Нет попробую CodeDezk 5 лет назад 0
0
Kamil Maciorowski

Executable path is not absolute- это значит exec.

Вообще execнет смысла здесь. Это встроенная оболочка, которая заменяет оболочку данной командой. Нет абсолютного пути к execисполняемому файлу, потому что нет исполняемого файла.

su является исполняемым файлом. Линия может быть

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

Но использование suможет не быть хорошей идеей в сервисе systemd. Смотрите: Как мне заставить мою службу systemd запускаться от определенного пользователя и запускаться при загрузке?

0
teejay

Обычно «Неверный аргумент» - это сам файл определения модуля. Для отладки вы можете использовать:

sudo systemd-analyze verify QtApp.service 

или в случае локального обслуживания пользователя:

sudo systemd-analyze --user verify QtApp.service 

Похожие вопросы