Estoy escribiendo un archivo de unidad systemd para una aplicación Java y me gustaría controlar la versión de Java utilizada para iniciarlo. Mi (simplificado) archivo de servicio es
[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
Cuando se trata de ponerlo en marcha me sale un error de vuelta
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.
Sé que JAVA_HOME
se establece correctamente; si cambio la ExecStart
línea para comenzar /usr/bin/java
y luego agrego algo como -DsomeOption=${JAVA_HOME}
puedo verlo bien.
La solución obvia es crear una secuencia de comandos de contenedor, pero creo que no sirve para nada el uso de un archivo de servicio.
¿Cómo puedo configurar JAVA_HOME para mi aplicación Java usando un archivo de unidad?