
當我在 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 服務的一部分:
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不是shell腳本的總稱,ExecStart
服務單元的設定值為不是 shell 腳本一點也不,更不用說諜影重重 shell腳本。多年來,許多人認為他們可以將 shell 腳本放在這裡,從實際的 shell 腳本或 shell 命令列輸入轉換而來,導致 systemd 手冊最終對此非常明確。請參閱 的「命令列」部分man systemd.service
。
手冊僅指出尾隨反斜線合併行。與行尾之間有空白字元(CR、SPC 等)的反斜線(當然)不是尾隨斜線。因此,所有後續行都成為(格式錯誤或無效)進一步的鍵+值設定。
閱讀systemd.service
手冊並了解您實際使用的規則。它不是 shell 腳本,您不應該假設它是 shell 腳本,並且您可以這樣對待它,即使這種方法有時很幸運。