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

아니면 적어도 두 번째 경우로 만드세요.

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

관련 정보