Sto scrivendo un file di unità systemd per un'applicazione Java e vorrei controllare la versione di Java utilizzata per avviarlo. Il mio file di servizio (semplificato) è
[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
Quando provo ad avviarlo, ricevo un errore
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.
So che JAVA_HOME
è impostato correttamente; se cambio la ExecStart
linea per cominciare /usr/bin/java
e poi aggiungo qualcosa come -DsomeOption=${JAVA_HOME}
posso vederlo bene.
La soluzione ovvia è quella di creare uno script wrapper ma ritengo che sconfigga il punto di usare un file di servizio.
Come posso impostare JAVA_HOME per la mia applicazione Java usando un file di unità?