通过systemd运行Java时无法识别的选项

问题描述 投票:0回答:1

我正在尝试使用systemd将Java应用程序作为系统服务运行。服务的.service文件具有以下命令行:

ExecStart=/usr/bin/java -cp $CLASSPATH:/path/to/my.jar org.example.MainClass -myoption

其中-myoption是要传递给主类的main()方法的选项。

从bash启动命令行时,命令行按预期工作;该选项将传递给主类。

但是,当我尝试使用systemctl start启动服务,然后使用systemctl status查询其状态时,我发现JVM终止于:

Unrecognized option: -myoption

显然,JVM试图使-myoption具有某种意义,而不是将其作为参数传递给主类。

由于该服务旨在在向JVM发送SIGINT时退出,因此我无法使用变通办法,这将使systemd掩盖JVM的PID。

作为系统服务启动时如何将命令行选项传递给主类?

java service systemd
1个回答
0
投票

ExecStart中的环境变量必须用大括号括起来,除非它们是分开的单词(并且不能在可执行文件本身的路径中使用。)>

以下预期工作:

ExecStart=/usr/bin/java -cp ${CLASSPATH}:/path/to/my.jar org.example.MainClass -myoption
© www.soinside.com 2019 - 2024. All rights reserved.