Leitura adicional

Leitura adicional

Quando executo a seguinte parte em um script bash, ela 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

No entanto, se eu modificá-lo ligeiramente para usá-lo como parte de um serviço 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

Isso me mostra:

● 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 '='.

Qual é a sintaxe correta para isso? Eu tinha tanta certeza de que o simples bash deveria funcionar aqui.

PS Acabei de notar que se eu colocar tudo em uma linha, funciona. No entanto, seria ótimo saber como manter tudo em várias linhas.

Responder1

Eu tinha tanta certeza de que o simples bash deveria funcionar aqui.

bash não é um termo genérico para shell script, e o valor da ExecStartconfiguração de uma unidade de serviço énão script de shellem tudo, muito menosConcha Bourne Novamenteroteiro. Muitas pessoas ao longo dos anos pensando que podem colocar scripts de shell aqui, transpostos de scripts de shell reais ou de entrada de linha de comando do shell, resultaram no manual do systemd sendo bastante explícito sobre isso. Consulte a seção "Linhas de comando" do man systemd.service.

O manual afirma apenas que umSeguindobarra invertida mescla linhas. Uma barra invertida com caracteres de espaço em branco (CR, SPC, etc.) entre ela e o final da linha (é claro) não é uma barra final. Assim, todas as linhas subsequentes tornam-se (malformadas ou inválidas) outras configurações de chave+valor.

Leia o systemd.servicemanual e entenda as regras do que você realmente está usando aqui. Não é um script de shell, e você não deve trabalhar com a suposição de que é e que pode simplesmente tratá-lo como tal, mesmo que essa abordagem dê sorte de vez em quando.

Leitura adicional

informação relacionada