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
이후 크론탭 에디터를 통해 스케줄링 설정을 해준다. (아래는 매분마다 실행되는 스케줄 설정이다. 스크립트 경로와 이름은 본인에 맞게 변경해야 한다.)
* * * * * /home/service_check.sh > /home/crontab.log
crontab 서비스를 재시작 해주면 해당 오류는 더 이상 발생하지 않으며, 정상 동작하게 된다.
# service crond restart
아래 명령어로 crontab 이 동작하고 있는지 확인할 수 있다.
# 크롭탭 실시간 동작 확인 로그
# tail -f /var/log/cron
메인 이미지 출처 : 사진: Unsplash의Raphael Wild