我正在尝试使用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。
作为系统服务启动时如何将命令行选项传递给主类?
ExecStart
中的环境变量必须用大括号括起来,除非它们是分开的单词(并且不能在可执行文件本身的路径中使用。)>
以下预期工作:
ExecStart=/usr/bin/java -cp ${CLASSPATH}:/path/to/my.jar org.example.MainClass -myoption