
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
、ここで実際に使用しているもののルールを理解してください。これはシェル スクリプトではありません。シェル スクリプトであると想定して作業すべきではなく、そのように扱うだけでよいと考えるべきではありません。たとえそのアプローチがときどきうまくいくとしてもです。