Tôi đang viết một tệp đơn vị systemd cho một ứng dụng Java và tôi muốn kiểm soát phiên bản Java được sử dụng để khởi động nó. Tệp dịch vụ (đơn giản hóa) của tôi là
[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
Khi cố gắng khởi động tôi gặp lỗi
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.
Tôi biết rằng nó JAVA_HOME
được đặt chính xác; nếu tôi thay đổi ExecStart
dòng để bắt đầu /usr/bin/java
và sau đó thêm một cái gì đó như -DsomeOption=${JAVA_HOME}
tôi có thể thấy nó tốt.
Cách giải quyết rõ ràng là tạo ra một tập lệnh bao bọc nhưng tôi cảm thấy rằng nó đánh bại điểm sử dụng tệp dịch vụ.
Làm cách nào tôi có thể đặt JAVA_HOME cho ứng dụng Java của mình bằng tệp đơn vị?