运行 Java 通过 systemd 时无法识别的选项
Unrecognized option when running Java via systemd
我正在尝试 运行 Java 应用程序作为 systemd 的系统服务。该服务的 .service
文件具有以下命令行:
ExecStart=/usr/bin/java -cp $CLASSPATH:/path/to/my.jar org.example.MainClass -myoption
其中 -myoption
是一个选项,旨在传递给主要 class 的 main()
方法。
当我从 bash 启动它时,命令行按预期工作;该选项传递给主要 class.
但是,当我尝试使用 systemctl start
启动服务然后使用 systemctl status
查询其状态时,我发现 JVM 终止于:
Unrecognized option: -myoption
显然,JVM 试图理解 -myoption
而不是将其作为参数传递给主 class。
由于该服务设计为在向 JVM 发送 SIGINT
时退出,我无法使用会从 systemd 中隐藏 JVM 的 PID 的变通方法。
作为 systemd 服务启动时,如何将命令行选项传递给主 class?
ExecStart
中的环境变量必须用大括号括起来,除非它们是单独的词(并且不能在可执行文件本身的路径中使用)。
以下按预期工作:
ExecStart=/usr/bin/java -cp ${CLASSPATH}:/path/to/my.jar org.example.MainClass -myoption
我正在尝试 运行 Java 应用程序作为 systemd 的系统服务。该服务的 .service
文件具有以下命令行:
ExecStart=/usr/bin/java -cp $CLASSPATH:/path/to/my.jar org.example.MainClass -myoption
其中 -myoption
是一个选项,旨在传递给主要 class 的 main()
方法。
当我从 bash 启动它时,命令行按预期工作;该选项传递给主要 class.
但是,当我尝试使用 systemctl start
启动服务然后使用 systemctl status
查询其状态时,我发现 JVM 终止于:
Unrecognized option: -myoption
显然,JVM 试图理解 -myoption
而不是将其作为参数传递给主 class。
由于该服务设计为在向 JVM 发送 SIGINT
时退出,我无法使用会从 systemd 中隐藏 JVM 的 PID 的变通方法。
作为 systemd 服务启动时,如何将命令行选项传递给主 class?
ExecStart
中的环境变量必须用大括号括起来,除非它们是单独的词(并且不能在可执行文件本身的路径中使用)。
以下按预期工作:
ExecStart=/usr/bin/java -cp ${CLASSPATH}:/path/to/my.jar org.example.MainClass -myoption