[CentOS7] 톰캣 서비스 등록하기(7버전 미만)
출처1 : https://www.lesstif.com/pages/viewpage.action?pageId=6979609
출처2 : http://blog.nuriware.com/archives/239
2018/10/04 - [프로그램 자료/Cent OS] - [CentOS7] openJDK(zulu), tomcat 설정
2018/10/04 - [프로그램 자료/Cent OS] - [CentOS7] 톰캣 서비스 등록하기 systemctl 사용 (7버전 이상)
7.4버전에서 테스트하던 중 systemctl 하고 무엇이 안맞는지, 아니면 역시나 잘 몰라서 안돌아가는지 잘 안되었다.
서비스를 생성하기 위해 만드는 bash 파일에 pid 를 검색하는 부분이 있는데
리눅스에 대해 전무하다보니 좀 헤메었다.
반디집으로 tgz 파일을 압축하거나 풀 수 있는데, 이 때 관리자 권한으로 실행해야 한다.
#현재 실행중인 프로세스명으로 검색
$ ps -ef | grep tomcat-myService
#현재 실행중인 프로세스명으로 검색하여 PID만 출력
$ ps -ef | grep tomcat-myService | awk '{print $2}'
#현재 실행중인 프로세스명으로 검색하여 PID만 출력(top 1?)
$ ps -eaf | grep processname=tomcat-myService | grep -v grep | awk '{print $2}'
#.bash 내에서 PID에 pid 할당
PID=`ps -eaf | grep processname=tomcat-myService | grep -v grep | awk '{print $2}'`
위와 같은 방법으로 pid를 변수에 등록하여 사용할 수 있다.
# 서비스로 등록하기
# 심볼릭 링크 생성
$ ln -s /usr/local/myApp/myService.sh /etc/init.d/myService
# 실행 속성 권한 부여
$ chmod +x /etc/init.d/myService
# 서비스 등록
$ chkconfig --add myService
# 서비스 레벨 설정
$ chkconfig --level 12345 myService on
# 서비스 리스트 확인
$ chkconfig --list | grep myService
# 서비스 실행
$ service myService restart[start, stop]
내가 설정한 설정파일 전문
작업은 notepad++ 로 작업을 했는데 주의 사항이 좀 있더라.
인코딩은 UTF-8로 한다.(with BOM 아닙니다.)
줄의 끝문자는 UNIX형식으로 한다.(편집->줄의 끝문자(EOL) 변환->UNIX형식)
추가적으로 막상 배쉬파일을 서비스로 등록하고 실행하였을 때 동작하지 않고 오류가 발생하면 어디가 오류인지 파악하기 어렵더라.
그래서 배쉬파일만으로 실행했을 때 오류가 없는지 확인이 꼭 필요하다.
$ ./myService.sh start
와 같은 방법으로 해당 파일을 테스트 해볼 수 있다.
# 환경변수 설정, JAVA_HOME은 이곳에 와야 실행되더라?
$ vi /etc/profile
export JAVA_HOME=/usr/local/myApp/openjdk1.8_zulu
#!/bin/bash
#
# tomcat
#
# chkconfig: 345 96 30
# description: start and stop myService HTTP Server.
#
# processname: java
# pidfile: /var/run/tomcat.pid
#
### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Should-Start: distcache
# Short-Description: start and stop myService HTTP Server
# Description: implementation for Spring boot.
## END INIT INFO
# Source function library.
. /etc/init.d/functions
## tomcat installation directory
PROCESS_NAME=tomcat-myService
# 환경변수 등록
CATALINA_HOME=/usr/local/myApp/tomcat9
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
# 톰캣 사용유저 설정
TOMCAT_USER=root
## Path to the pid, runnning info file
pidfile=${PIDFILE-/var/run/${PROCESS_NAME}.pid};
lockfile=${LOCKFILE-/var/lock/subsys/${PROCESS_NAME}};
RETVAL=0
case "$1" in
start)
PID=`ps -eaf | grep processname=tomcat-myService | grep -v grep | awk '{print $2}'`
if [[ (-n ${PID}) && ($PID -gt 0) ]]; then
logger -s "${PROCESS_NAME}(pid ${PID}) is already running."
exit;
fi
if [ $CATALINA_HOME/bin/startup.sh ]; then
logger -s "Starting Tomcat"
/bin/su -l ${TOMCAT_USER} -c "$CATALINA_HOME/bin/startup.sh -Dprocessname=${PROCESS_NAME}"
PID=`ps -eaf|grep processname=${PROCESS_NAME}|grep -v grep|awk '{print $2}'`
RETVAL=$?
[ $RETVAL = 0 ] && touch ${lockfile}
[ $RETVAL = 0 ] && echo "${PID}" > ${pidfile}
fi
;;
stop)
PID=`ps -eaf | grep processname=tomcat-myService | grep -v grep | awk '{print $2}'`
## if PID valid run shutdown.sh
if [[ -z ${PID} ]];then
logger -s "${PROCESS_NAME} is not running."
exit;
fi
if [[ (${PID} -gt 0) && (-f $CATALINA_HOME/bin/shutdown.sh) ]];
then
logger -s "Stopping Tomcat"
/bin/su -l ${TOMCAT_USER} -c "$CATALINA_HOME/bin/shutdown.sh"
RETVAL=$?
[ $RETVAL = 0 ] && rm -f ${lockfile}
[ $RETVAL = 0 ] && rm -f ${pidfile}
fi
;;
status)
status -p ${pidfile} ${PROCESS_NAME}
RETVAL=$?
;;
restart)
$0 stop
$0 start
;;
version)
if [ -f $CATALINA_HOME/bin/version.sh ];
then
logger -s "Display Tomcat Version"
/bin/su -l ${TOMCAT_USER} -c "$CATALINA_HOME/bin/version.sh"
RETVAL=$?
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|status|version}"
exit 1
;;
esac
exit $RETVAL