Configurando o ambiente no systemd

1

Estou no Debian 8 e preciso definir o JAVA_HOME no meu serviço. Eu estou colocando isso é um script por isso precisa consultar o sistema em primeiro lugar como nem sempre vai ser o mesmo. Na linha de comando, a linha ExecStart funciona bem, mas não quando eu a coloco nesse serviço. Eu recebo:

Aug 12 17:03:16 debian jsvc[6761]: Invalid option -f
Aug 12 17:03:16 debian jsvc[6761]: Cannot parse command line arguments
Aug 12 17:03:16 debian systemd[1]: App1.service: control process exited, code=exited status=1
Aug 12 17:03:16 debian systemd[1]: Failed to start App1.
-- Subject: Unit App1.service has failed

Meu serviço:

[Unit]
Description=App1
After=syslog.target


[Service]
ExecStart=/usr/bin/jsvc -user root -home ${readlink -f /usr/bin/java | sed "s:bin/java::"} -cp /usr/share/java/commons-daemon.jar:/usr/local/app1.jar -pidfile /var/run/app1 -pidfile
Type=forking
    
por jaseUK 12.08.2016 / 18:04

2 respostas

3

Sua linha exec será dividida em espaços e cada palavra passada como um argumento para o comando. A solução mais simples para você é colocar o comando inteiro entre aspas simples e adicionar /bin/bash -c na frente dele:

ExecStart=/bin/bash -c 'exec /usr/bin/jsvc -user ... -pidfile'

Use -cv inicialmente para poder ver nos registros qual linha foi passada. Eu também presumo que você queira $() não ${} , que systemd não estará expandindo.

    
por 12.08.2016 / 19:45
0

Você pode adicionar uma linha como: Enviroment="JAVA_HOME = / foo / bar / baz" na seção [Service] do arquivo de serviço.

Como alternativa, use algo como EnvironmentFile = / etc / default / myapp e nesse conjunto de arquivos JAVA_HOME = / baz / quux

    
por 13.08.2016 / 03:17