[Linux] Crontab "Neither the JAVA_HOME nor the JRE_HOME environment variable is definedAt least one of these environment variable is needed to run this program" 해결 방법

2023-01-12


사진: Unsplash 의 Raphael Wild


1. 원인

 

tomcat의 프로세스 확인 후 죽었으면 되살리는 프로세스를 만드는 도중 생겼던 이슈이다. 실제 스크립트 자체를 실행했을 때는 문제없이 잘되지만, crontab에서 실행 시 이미 서버 내에서는 환경 변수가 설정이 되어 있음에도 불구하고

 

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

 

위와 같은 에러를 뱉었다.  이는 crontab에서는 직접 환경변수를 찾을 수 없어 발생하는 문제이며, 직접 환경 변수를 스크립트 파일에 적어주어야 한다.


2. 방법

 

아래는 스크립트에서 중요한 부분은 export가 사용된 두 부분이다. export를 해줌으로써 crontab도 환경 변수를 인식하여 실행 할 수 있게 된다.

 

export JAVA_HOME=/usr/lib/jdk(자신의 jdk 버전 정보 입력)
export PATH=$PATH:$JAVA_HOME/bin

 

 

#!/bin/bash


export JAVA_HOME=/usr/lib/jdk(자신의 jdk 버전 정보 입력)
export PATH=$PATH:$JAVA_HOME/bin

echo "tomcat service check"

serviceCheckLen=$(ps -ef | grep tomcat)


if [[ "$serviceCheckLen" == *tomcat(자신의 톰켓 서비스 명을 입력해주면된다.)* ]]; then
        echo "tomcat is live"
else
        echo "tomcat is dead"
        /(절대경로)/tomcat(자신의톰켓서비스)/bin/startup.sh
fi

echo $serviceCheckLen
~

 

소괄호 안에는 자신의 서버에 맞게 설정해 주면 된다.


# crontab -e

 

이후 크론탭 에디터를 통해 스케줄링 설정을 해준다. (아래는 매분마다 실행되는 스케줄 설정이다. 스크립트 경로와 이름은 본인에 맞게 변경해야 한다.)

 

* * * * * /home/service_check.sh > /home/crontab.log

 

crontab 서비스를 재시작 해주면 해당 오류는 더 이상 발생하지 않으며, 정상 동작하게 된다.

 

# service crond restart

아래 명령어로 crontab 이 동작하고 있는지 확인할 수 있다.

 

# 크롭탭 실시간 동작 확인 로그
# tail -f /var/log/cron

메인 이미지 출처 : 사진: UnsplashRaphael Wild