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