Estou escrevendo um arquivo de unidade systemd para um aplicativo Java e gostaria de controlar a versão do Java usada para iniciá-lo. Meu arquivo de serviço (simplificado) é
[Service]
Type=simple
EnvironmentFile=%h/Documents/apps/app/app-%i/app.cfg
ExecStart=${JAVA_HOME}/bin/java ${JAVA_OPTS} -jar %h/Documents/apps/app/app-%i/myapp.jar
SuccessExitStatus=143
Ao tentar iniciá-lo, recebo um erro de volta
Apr 28 12:43:37 rombert systemd[1613]: [/home/robert/.config/systemd/user/app@.service:7] Executable path is not absolute, ignoring: ${JAVA_HOME}/bin/java ${JAVA_OPT
Apr 28 12:43:37 rombert systemd[1613]: app@1.0.0.service lacks both ExecStart= and ExecStop= setting. Refusing.
Eu sei que JAVA_HOME
está definido corretamente; se eu mudar a ExecStart
linha para começar /usr/bin/java
e depois adicionar algo como -DsomeOption=${JAVA_HOME}
eu posso ver bem.
A solução óbvia é criar um script de wrapper, mas acho que isso acaba com o ponto de usar um arquivo de serviço.
Como posso definir JAVA_HOME para meu aplicativo Java usando um arquivo de unidade?