systemd: O serviço não possui as configurações ExecStart = e ExecStop =. Recusando

0

Estou tentando executar meu aplicativo como daemon / service em uma distro Debian via systemd . Aqui está o meu arquivo de serviço:

[Unit]
Description=MyApp Service
After=multi-user.target

[Service]
Type=simple
Restart=always
ExecStart=sudo /usr/bin/java -jar /home/pi/myapp.jar

[Install]
WantedBy=multi-user.target

Copio isso para /lib/systemd/system/myapp.service . Eu então corro:

sudo systemctl enable myapp

Eu então verifico o status:

sudo systemctl status myapp

E vejo esses erros:

● myapp.service - MyApp Service
   Loaded: error (Reason: Invalid argument)
   Active: inactive (dead)

Sep 29 09:56:24 raspberrypi systemd[1]: [/lib/systemd/system/myapp.service:8] Executable path is not absolute, ignoring: sudo /usr/bin/java -jar /home/pi/myapp.jar
Sep 29 09:56:24 raspberrypi systemd[1]: myapp.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.

Quando eu faço which java , vejo:

pi@raspberrypi:/lib/systemd/system $ which java
/usr/bin/java

Portanto, não estou entendendo por que systemd está reclamando do caminho do executável. Tem alguma ideia de como posso resolver problemas?

    
por smeeb 29.09.2017 / 12:02

1 resposta

3

O caminho sudo não é absoluto. Se a sua unidade systemd for uma unidade de sistema, o sudo não será necessário de qualquer maneira, já que as unidades do sistema são executadas como root por padrão.

EDIT: em vez de executar a JVM e o aplicativo Java inteiro como raiz, provavelmente seria melhor executar o serviço como um usuário não privilegiado. Se o aplicativo precisar de algum recurso que normalmente não é concedido a usuários não privilegiados, ele poderá ser adicionado com a configuração AmbientCapabilities . Por exemplo, adicionando as seguintes linhas à seção [Service] :

AmbientCapabilities=CAP_SYS_RAWIO
User=nobody

o serviço é executado como usuário nobody , mas é concedido o recurso CAP_SYS_RAWIO .

    
por 29.09.2017 / 12:15