дальнейшее чтение

дальнейшее чтение

Когда я запускаю следующую часть в скрипте 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руководство и поймите правила того, что вы на самом деле здесь используете. Это не скрипт оболочки, и вы не должны работать с предположением, что это так, и что вы можете просто относиться к нему как к таковому, даже если этот подход время от времени приносит удачу.

дальнейшее чтение

Связанный контент