systemctl Falha ao iniciar o serviço, argumento inválido

0

Eu preciso executar um aplicativo Qt na inicialização com permissão de root, abaixo está o script que eu criei usando systemctl chamado QtApp.service

[Unit]
Description=QtApp

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

[Install]
WantedBy=multi-user.target

Mas quando eu executo o comando para iniciar o serviço sudo systemctl start QtApp.service estou recebendo o seguinte erro

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

Aqui estão os detalhes do erro

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.
    
por CodeDezk 06.07.2018 / 13:18

3 respostas

0

Executable path is not absolute - significa exec .

Geralmente exec não faz sentido aqui. É um shell embutido que substitui o shell por um determinado comando. Não há um caminho absoluto para exec executável porque não há executável.

su é um executável. A linha pode ser

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

Mas usando su pode não ser uma boa ideia no serviço systemd. Veja: Como faço meu serviço systemd rodar via usuário específico e inicio na inicialização?

    
por 06.07.2018 / 13:50
0

O erro diz

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

Tente usar o caminho absoluto (por exemplo, / usr / local / QtInst / QtApp ) em vez de / QtInst / QtApp .

Este pode ser relevante.

    
por 06.07.2018 / 13:29
0

Geralmente, o "argumento inválido" aqui é o próprio arquivo de definição de unidade. Para depurá-lo, você pode usar:

sudo systemd-analyze verify QtApp.service

ou no caso de serviço local do usuário:

sudo systemd-analyze --user verify QtApp.service
    
por 19.07.2018 / 01:03