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バージョンを使用して実行されます。したがって、サービスは開始されず、アクティブになりません。

ちなみに、以下は私のシェルスクリプトの短い部分です。connect.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

または、少なくとも2番目のケースにしてください。

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

関連情報