Heart's Develop Inside (WP)

Heart's Develop Blog in WordPress.com

Apache Commons Daemon 사용 방법 정리

leave a comment »

Java 로 Daemon Process 를 만들기 위해 Apache Commons Daemon 라이브러리를 알아보고 사용 방법을 정리하였습니다

(Win32 / *NIX 가 사용하는 모듈이 다른데 이 문서에서는 *NIX 기준으로 정리했습니다)

Apache Commons Daemon

  • 메인 페이지 : http://commons.apache.org/proper/commons-daemon/
  • Tomcat 이 Daemon Process 로 동작하기 위해 내부적으로 사용하는 라이브러리
  • 2개의 파트로 나뉘어진다
    • OS dependent 한 작업(Daemonize, 기타 등등)들을 수행하는 모듈 : C 로 구현
    • Daemon API : Java 로 구현
  • Platform 지원
    • Win32 : procrun
    • *NIX : jsvc
  • 최신 버전 : 1.0.17
    • Maven Central 에는 1.0.15 까지 올라와 있다

설치

Maven

<dependency>
<groupId>commons-daemon</groupId>
<artifactId>commons-daemon</artifactId>
<version>1.0.15</version>
</dependency>

JSVC

mkdir -p jsvc
cd jsvc
wget http://apache.mirror.cdnetworks.com/commons/daemon/source/commons-daemon-1.0.15-src.tar.gz
tar xvfz commons-daemon-1.0.15-src.tar.gz
cd commons-daemon-1.0.15-src
cd src/native/unix/
sh support/buildconf.sh
./configure –with-java=/usr/java
make
sudo cp jsvc /usr/bin

  • support/buildconf.sh 실행 시 아래처럼 나타나야 함
    • support/buildconf.sh: configure script generated successfully

  • OSX 10.8 / Java 1.6 사용 시 configure 는 아래와 같이 실행한다
    • ./configure –with-java=/System/Library/Frameworks/JavaVM.framework/Versions/Current

    • JDK 경로에 맞게 실행하면 jni*.h 파일을 찾을 수 없다고 나옴

구현

  • org.apache.commons.Daemon 인터페이스를 구현하는 클래스를 만든다
  • Daemon 인터페이스 명세
    • package org.apache.commons.daemon;

      public interface Daemon
      {
      public void init(DaemonContext context) throws DaemonInitException, Exception;
      public void start() throws Exception;
      public void stop() throws Exception;
      public void destroy();
      }

  • 메소드 설명
    • init() : Daemon 과 모듈에 대한 초기화를 담당
      • context.getArguments() 로 실행 전달인자(String[] args) 를 얻을 수 있다
    • start() : 모듈을 실제로 실행
    • stop() : 외부 시그널이 들어왔을 때 호출되는 메소드, 동작하는 모듈을 멈춤
    • destroy() : stop() 호출 후, JVM 종료 전에 호출, 자원 해제 담당
  • 정상적으로 stop() 이 호출되려면, start() 에서 실제로 동작할 모듈을 Thread 로 띄우고 stop() 에서 Thread 를 멈추게 한 다음, 해당 Thread 를 join 하도록 구현한다
    • Thread 를 새로 띄우지 않고 start() 에서 Thread 제어권을 가져가버리면 외부에서 종료 시그널이 들어왔을 때 stop() 이 호출되지 않고 비정상 종료된다
  • init() 과 destroy() 가 짝이 되고, start() 와 stop() 이 짝이 된다
    • 자원 할당 및 해제도 짝에 맞춰 수행하면 됨

실행

실행 방법

jsvc  [JSVC params] [Entry Point Class] [Arguments]

  • 파라미터
    • -outfile : stdout 을 받을 파일명 (기본값 : /dev/null)
    • -errfile : stderr 를 받을 파일명 (기본값 : /dev/null)
    • -pidfile : PID 가 저장될 파일 경로 (종료시 활용)
    • -cp : JVM 에 전달될 classpath (Apache Commons Daemon 이 포함되어 있어야 함)
  • OSX 에서 실행 시 주의사항
    • jsvc 실행하기 전에 arch 로 JVM 의 bit 를 명시해야 함
      • 32bit : arch -arch i386
      • 64bit : arch -arch x86_64
    • JSVC params 에 -jvm server 를 추가해야 함

종료 방법

jsvc -stop -pidfile PID_FILE_PATH [Entry Point Class]

Advertisements

Written by kabhwan

2013년 6월 22일 , 시간: 1:00 오전

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: