在 systemd 服务文件中引用另一个 Java 版本

在 systemd 服务文件中引用另一个 Java 版本

我有一个应用程序需要设置 JAVA_HOME 环境才能成功运行。然而,在 RHEL 服务器上,当前版本的 java 指向“openjdk版本“1.8.0_302”。

下面是我配置的服务文件,使其只能通过特定用户执行,并且还定义了 JAVA_HOME 路径。

[Service]
Type=simple
User=testuser
Restart=always
RestartSec=5sec
IgnoreSIGPIPE=no
KillMode=process
Environment="OPENICF_OPTS=-Xmx1024m"
Environment=JAVA_HOME=/path to jdk/JDK/jdk-11.0.15.1/
ExecStart=/path to conf file/bin/Connect.sh /start

在启用并启动此服务时,仍然使用与应用程序不兼容的 openjdk 1.8 版本执行 shell 脚本。因此,该服务无法启动并变为活动状态。

作为参考,下面是我的 shell 脚本的简短片段连接.sh。在bash脚本中,您可以看到java变量是如何定义的。

# Check Java availability
if type -p 'java' >/dev/null; then
    JAVA=java
elif [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ];  then
    JAVA="$JAVA_HOME/bin/java"
else
    echo JAVA_HOME not available, Java is needed to run the Server
    echo Please install Java and set the JAVA_HOME accordingly
    exit 1
fi

有人可以帮我解决这个问题吗?我无法弄清楚我在这里做错了什么。

答案1

export PATH="${JAVA_HOME}/bin:${PATH}"

Connect.sh在, 或,的开头假设您使用"$JAVA"而不是java整个脚本, 消除:

if type -p java >/dev/null; then
    JAVA=java
el

或使其成为第二种情况,至少:

if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ];  then
    JAVA="$JAVA_HOME/bin/java"
elif type -p java >/dev/null; then
    JAVA=java
...

或者:

if [ -n "$JAVA_HOME" ];  then
    JAVA="$JAVA_HOME/bin/java"
else
    JAVA=java
fi


if ! type -p "$JAVA" >/dev/null; then
    echo Cannot find java as instructed
    exit 1
fi

(当然,这种方法意味着/usr/bin/java只要JAVA_HOME设置了环境变量,它就应该忽略,无论环境变量中的路径是否实际存在。)

相关内容