
Когда я запускаю следующую часть в скрипте 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 должен здесь работать.
PS Только что заметил, что если разместить все в одну строку, то это работает. Однако было бы здорово знать, как разместить все в нескольких строках.
решение1
Я был уверен, что простой bash здесь сработает.
bash не является общим термином для скрипта оболочки, а значение настройки ExecStart
сервисного модуля равноне скрипт оболочкивообще, не говоря уже оОболочка Bourne Againscript. Многие люди на протяжении многих лет думали, что они могут поместить сюда shell script, транспонированный из реальных shell scripts или shell command line input, что привело к тому, что в руководстве systemd в конечном итоге было довольно ясно об этом сказано. См. раздел «Командные строки» в man systemd.service
.
В руководстве указано только, чтоотстающийОбратная косая черта объединяет строки. Обратная косая черта с пробелами (CR, SPC и т. д.) между ней и концом строки (конечно) не является завершающей. Таким образом, все последующие строки становятся (неправильно сформированными или недействительными) дополнительными настройками ключ+значение.
Прочитайте systemd.service
руководство и поймите правила того, что вы на самом деле здесь используете. Это не скрипт оболочки, и вы не должны работать с предположением, что это так, и что вы можете просто относиться к нему как к таковому, даже если этот подход время от времени приносит удачу.