RHEL/CentOS 에 tomcat 을 service 로 등록하여 booting 시 자동으로 구동되게 하기
Redhat 계열 (CentOS)에 tomcat 을 init.d의 서비스로 등록해서 부팅시 자동으로 시작되게 하는 방법을 정리해 본다.
java 와 tomcat 은 제대로 설치되고 설정되어 있다고 가정한다.
init.d 폴더에 등록
run-level utility 인 chkconfig 에 등록하려면 먼저 booting/shutdown 시 참조하는 폴더인 /etc/init.d 에 스크립트가 등록되어 있어야 한다.
구동 스크립트(최종 버전은 gist 에서 찾을 수 있다.)를 /etc/init.d/tomcat-webapp1 으로 저장한다. 하나의 서버에서 여러 개의 tomcat 을 띄울 수 있으므로 식별을 위해 서비스명을 구동 스크립트에 적어주는게 좋고 여기에서는 서비스명이 webapp1 이다.
- tomcat 은 /opt/apache-tomcat-7.0.54 로 설정되어 있으므로 다른 경로에 설치했을 경우 CATALINA_HOME 부분을 수정한다.
- 보안 문제때문에 tomcat 프로세스는 tomcat 이라는 계정명으로 구동된다. 다른 계정일 경우TOMCAT_USER 부분을 수정한다.
실행 속성을 부여한다.
chmod +x /etc/init.d/tomcat-webapp1
run-level 에 등록
부팅과 동시에 실행하려면 run-level 에 등록하면 된다.
다음 명령어로 run level 에 등록한다.
chkconfig --add tomcat-webapp1
제대로 등록되었는지 확인한다. (run level이 3,4,5 일때 구동된다)
$ chkconfig --list tomcat-webapp1 tomcat 0:off 1:off 2:off 3:on 4:on 5:on 6:off
- 이제 부팅 및 shutdown 시에 자동으로 실행/종료될 것 이다.
cmd 에서 실행
- 다른 service 명령과 동일한 옵션을 제공하므로 shell 상에서도 사용할 수 있다.
- 시작
service tomcat-webapp1 start
재시작$ service tomcat-webapp1 restart lesstif: Stopping Tomcat Using CATALINA_BASE: /opt/apache-tomcat-7.0.54 Using CATALINA_HOME: /opt/apache-tomcat-7.0.54 Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.54/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/apache-tomcat-7.0.54/bin/bootstrap.jar:/opt/apache-tomcat-7.0.54/bin/tomcat-juli.jar lesstif: Starting Tomcat Using CATALINA_BASE: /opt/apache-tomcat-7.0.54 Using CATALINA_HOME: /opt/apache-tomcat-7.0.54 Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.54/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/apache-tomcat-7.0.54/bin/bootstrap.jar:/opt/apache-tomcat-7.0.54/bin/tomcat-juli.jar Tomcat started.
종료service tomcat-webapp1 stop
상태 보기$ service tomcat-webapp1 status tomcat (pid 12162)를 실행하고 있습니다..
run-level 에서 삭제
tomcat 은 1024 이상의 포트에서 구동되므로 root 로 실행할 필요가 없고 해당 서비스 계정으로 실행하는게 보안상 더 안전하다. tomcat 구동을 service 명령을 통해서 일반 사용자가 하고 싶을 경우 다음 명령어로 자동 실행을 끈다
chkconfig tomcat-webapp1 off
일반 사용자로 구동은 위와 마찬가지로 service 명령을 통해 수행하면 되고 이 경우 실행 정보는 tomcat 설치 경로에 .${PROCESS_NAME}.pid 형식으로 남게 스크립트가 작성되어 있다.