
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
그러나 systemd-service의 일부로 사용하기 위해 약간 수정하면 다음과 같습니다.
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가 여기서 작동할 것이라고 확신했습니다.
추신: 모든 것을 한 줄에 배치하면 작동한다는 것을 알아냈습니다. 그러나 모든 내용을 여러 줄에 유지하는 방법을 아는 것이 좋습니다.
답변1
나는 간단한 bash가 여기서 작동할 것이라고 확신했습니다.
bash는 쉘 스크립트의 총칭이 아니며, ExecStart
서비스 단위 설정 값은 다음과 같습니다.쉘 스크립트가 아님전혀, 말할 것도 없이본 어게인 쉘스크립트. 수년 동안 많은 사람들이 실제 쉘 스크립트나 쉘 명령줄 입력을 대체하여 여기에 쉘 스크립트를 넣을 수 있다고 생각했기 때문에 결국 시스템 매뉴얼에서는 이에 대해 상당히 명시적으로 설명하게 되었습니다. 의 "명령줄" 섹션을 참조하세요 man systemd.service
.
설명서에는후행백슬래시는 줄을 병합합니다. 백슬래시와 줄 끝 사이에 공백 문자(CR, SPC 등)가 있는 백슬래시는 (물론) 후행 슬래시가 아닙니다. 따라서 이후의 모든 줄은 추가 키+값 설정이 됩니다(기형이거나 유효하지 않음).
설명서를 읽고 systemd.service
여기에서 실제로 사용하는 규칙을 이해하세요. 이는 쉘 스크립트가 아니며, 접근 방식이 때때로 운이 좋더라도 그렇게 처리할 수 있다고 가정하여 작업해서는 안 됩니다.