Bash 스크립트에서 다음 부분을 실행하면 작동합니다.
/usr/bin/java \
-Dspring.index.ignore=true \
--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED \
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
--add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED \
--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED \
--add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED \
--illegal-access=permit \
-jar /home/x/my.jar \
--spring.config.additional-location=/home/x/config.yml
그러나 시스템 서비스의 일부로 사용하기 위해 약간 수정하면 다음과 같습니다.
ExecStart=/usr/bin/java \
-Dspring.index.ignore=true \
--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED \
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
--add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED \
--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED \
--add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED \
--illegal-access=permit \
-jar /home/x/my.jar \
--spring.config.additional-location=/home/x/config.yml
그것은 나에게 보여줍니다:
● my.service - my
Loaded: error (Reason: Invalid argument)
Active: inactive (dead)
Unknown lvalue '--illegal-access' in section 'Service'
Missing '='.
Ignoring unknown escape sequences: "\"
Unknown lvalue '--add-exports' in section 'Service'
Unknown lvalue '--add-exports' in section 'Service'
Unknown lvalue '--add-exports' in section 'Service'
Unknown lvalue '--add-exports' in section 'Service'
Unknown lvalue '--add-exports' in section 'Service'
Unknown lvalue '--illegal-access' in section 'Service'
Missing '='.
올바른 구문은 무엇입니까? 나는 간단한 bash가 여기서 작동할 것이라고 확신합니다.
PS 모든 것을 한 줄에 넣으면 작동한다는 것을 알았습니다. 그러나 모든 것을 여러 줄에 유지하는 방법을 아는 것이 좋을 것입니다.
답변1
나는 간단한 bash가 여기서 작동할 것이라고 확신합니다.
bash는 쉘 스크립트의 일반적인 용어가 아닙니다. ExecStart
서비스 단위의 설정 값은 다음과 같습니다.쉘 스크립트가 아님전혀, 말할 것도 없이본 아이덴티티 쉘스크립트. 수년에 걸쳐 많은 사람들은 실제 쉘 스크립트나 쉘 명령줄 입력에서 변환된 쉘 스크립트를 여기에 넣을 수 있다고 생각했고, 결국 시스템 매뉴얼에서는 이에 대해 매우 명시적으로 설명하게 되었습니다. "명령줄" 섹션을 참조하십시오 man systemd.service
.
설명서에는 다음과 같은 내용만 나와 있습니다.뒤따라백슬래시는 줄을 병합합니다. 백슬래시와 줄 끝 사이에 공백 문자(CR, SPC 등)가 있는 것은 (물론) 후행 슬래시가 아닙니다. 따라서 모든 후속 행은 추가 키+값 설정이 됩니다(잘못된 형식 또는 유효하지 않은).
systemd.service
매뉴얼을 읽고 실제로 사용하는 규칙을 이해하십시오. 이는 쉘 스크립트가 아니므로 그렇다고 가정해서는 안 되며, 이 접근 방식이 때때로 운이 좋더라도 그렇게 취급할 수 있습니다.