ฉันกำลังเขียนไฟล์ systemd unit สำหรับแอปพลิเคชัน Java และฉันต้องการควบคุมเวอร์ชันของ Java ที่ใช้เพื่อเริ่มต้นทำงาน ไฟล์บริการของฉัน (แบบง่าย) คือ
[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
เมื่อพยายามเริ่มมันฉันได้รับข้อผิดพลาดกลับมา
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.
ฉันรู้ว่าJAVA_HOME
ตั้งไว้ถูกต้อง; ถ้าฉันเปลี่ยนExecStart
บรรทัดเพื่อเริ่มต้นด้วย/usr/bin/java
จากนั้นเพิ่มสิ่งที่-DsomeOption=${JAVA_HOME}
ฉันเห็นมันก็โอเค
วิธีแก้ปัญหาที่ชัดเจนคือการสร้างสคริปต์ตัวตัด แต่ฉันรู้สึกว่ามันเอาชนะจุดที่ใช้ไฟล์บริการ
ฉันจะตั้ง JAVA_HOME สำหรับแอปพลิเคชัน Java ของฉันโดยใช้ไฟล์หน่วยได้อย่างไร