参考文献

参考文献

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 行に配置すると機能することに気付きました。ただし、すべてを複数行に保持する方法を知っておくと便利です。

答え1

ここでは単純な bash が機能するはずだと確信していました。

bashはシェルスクリプトの一般的な用語ではなく、ExecStartサービスユニットの設定の値はシェルスクリプトではないまったく、ましてやボーンアゲインシェルスクリプト。長年にわたり、実際のシェル スクリプトまたはシェルのコマンド ライン入力を転置して、ここにシェル スクリプトを配置できると多くの人が考えてきた結果、systemd マニュアルでは、最終的にこの点について明確に説明されるようになりました。の「コマンド ライン」セクションを参照してくださいman systemd.service

マニュアルには、後続バックスラッシュは行を結合します。バックスラッシュと行末の間に空白文字 (CR、SPC など) がある場合は、(もちろん) 行末のバックスラッシュではありません。したがって、後続の行はすべて (不正な形式または無効な) キーと値の設定になります。

マニュアルを読んでsystemd.service、ここで実際に使用しているもののルールを理解してください。これはシェル スクリプトではありません。シェル スクリプトであると想定して作業すべきではなく、そのように扱うだけでよいと考えるべきではありません。たとえそのアプローチがときどきうまくいくとしてもです。

参考文献

関連情報