
Cuando ejecuto la siguiente parte en un script bash, funciona:
/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
Sin embargo, si lo modifico ligeramente para usarlo como parte de un servicio systemd:
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
Me muestra:
● 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 '='.
¿Cuál es la sintaxis correcta para esto? Estaba tan seguro de que un simple bash debería funcionar aquí.
PD: Acabo de notar que si coloco todo en una línea, funciona. Sin embargo, sería fantástico saber cómo mantener todo en varias líneas.
Respuesta1
Estaba tan seguro de que un simple bash debería funcionar aquí.
bash no es un término genérico para script de shell y el valor de la ExecStart
configuración de una unidad de servicio esno script de shellen absoluto, mucho menosBourne Again Shellguion. A lo largo de los años, muchas personas han pensado que pueden poner scripts de shell aquí, transpuestos desde scripts de shell reales o entradas de línea de comandos de shell, lo que ha resultado en que el manual de systemd finalmente sea bastante explícito al respecto. Consulte la sección "Líneas de comando" de man systemd.service
.
El manual sólo indica que unsiguiendoLa barra invertida fusiona líneas. Una barra invertida con caracteres de espacio en blanco (CR, SPC, et al.) entre ella y el final de la línea (por supuesto) no es una barra final. Por lo tanto, todas las líneas siguientes se convierten (mal formadas o no son válidas) en configuraciones clave+valor adicionales.
Lea el systemd.service
manual y comprenda las reglas de lo que realmente está usando aquí. No es un script de shell, y no debería trabajar asumiendo que lo es y que puede tratarlo como tal, incluso si ese enfoque tiene suerte de vez en cuando.