J'écris un fichier d'unité systemd pour une application Java et je voudrais contrôler la version de Java utilisée pour le démarrer. Mon fichier de service (simplifié) est
[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
Lorsque j'essaie de le démarrer, je reçois une erreur
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.
Je sais que JAVA_HOME
c'est correctement réglé; si je change la ExecStart
ligne pour commencer /usr/bin/java
et que j'ajoute quelque chose comme -DsomeOption=${JAVA_HOME}
je peux le voir très bien.
La solution de contournement évidente consiste à créer un script wrapper, mais je pense qu'il va à l'encontre de l'utilisation d'un fichier de service.
Comment puis-je définir JAVA_HOME pour mon application Java à l'aide d'un fichier d'unité?