예전 블로그에 있던 글인데 나중에 참고할 일이 있을지 모르니 복원한다.
(기존URL: http://oddpoet.net/2007/06/java-apps-as-nt-service)
----------
특정 Application을 background process로 데몬처럼 실행하고 싶을 때, Windows NT 계열의 OS에서는 NT service로 만드는 것을 생각해 볼 수 있을 것이다. 하지만 Java Application의 경우에는 기본적으로 NT service를 wrapping 해주는 기능이 없다. Java Service Wrapper 를 사용하는 방법도 있지만, 단순히 Windows OS계열에서의 자동 background 실행이 목적이라면 JavaService를 사용하는 것이 더 편하다.
1. JavaService 구하기
우선 http://javaservice.objectweb.org에 서 JavaService를 다운로드 받는다(현재 최신버전은 2.0.10). 압축을 풀면 2개의 실행파일(JavaService.exe, JavaServiceDebug.exe)와 예제 batch script파일들이 있을 것이다. 제일 중요한 건 JavaService.exe이다. (JavaServiceDebug.exe는 이름 그대로 디버그 용도의 실행파일이다.) 이 실행파일이 우리의 Java App를 NT 서비스로 Wrapping 해주게 된다. 기본 사용법은 JavaService.exe -help 명령으로 확인할 수 있다.
2. Java Application을 NT Service로 등록
JavaService -help install 명령으로 install 명령에 대한 help를 확인해보자.
추가적인 명령행 옵션은 다음과 같다.
-description service_desc
서비스에 대한 설명.
-current current_dir
서비스의 작업 디렉토리 지정
-method start_method
서비스 시작시 실행될 start_class의 메소드(default:main). ‘-start start_class’ 바로 다음에 와야한다.
Java Application를 excutable jar로 만들었다면, 다음과 같이 NT 서비스로 등록할 수 있다.
(참고로 윈도우2000에는 sc.exe가 없다. XP나 윈2003부터 제공되는 툴이다.)
3. NT Service에서 제거
NT Service로 등록된 Java app.를 제거하는 방법은 다음과 같다.
(기존URL: http://oddpoet.net/2007/06/java-apps-as-nt-service)
----------
특정 Application을 background process로 데몬처럼 실행하고 싶을 때, Windows NT 계열의 OS에서는 NT service로 만드는 것을 생각해 볼 수 있을 것이다. 하지만 Java Application의 경우에는 기본적으로 NT service를 wrapping 해주는 기능이 없다. Java Service Wrapper 를 사용하는 방법도 있지만, 단순히 Windows OS계열에서의 자동 background 실행이 목적이라면 JavaService를 사용하는 것이 더 편하다.
1. JavaService 구하기
우선 http://javaservice.objectweb.org에 서 JavaService를 다운로드 받는다(현재 최신버전은 2.0.10). 압축을 풀면 2개의 실행파일(JavaService.exe, JavaServiceDebug.exe)와 예제 batch script파일들이 있을 것이다. 제일 중요한 건 JavaService.exe이다. (JavaServiceDebug.exe는 이름 그대로 디버그 용도의 실행파일이다.) 이 실행파일이 우리의 Java App를 NT 서비스로 Wrapping 해주게 된다. 기본 사용법은 JavaService.exe -help 명령으로 확인할 수 있다.
2. Java Application을 NT Service로 등록
JavaService -help install 명령으로 install 명령에 대한 help를 확인해보자.
JavaService -install 서비스_이름 JVM_라이브러리 [JVM option] -start 시작_클래스 [-method 시작_메소드]필수 파라메터는 위와 같이 서비스_이름 , JVM_라이브러리, 시작_클래스 이다. ‘서비스_이름’은 NT 서비스로 등록될 서비스 이름을 말한다. ‘JVM_라이브러리’는 JRE의 jvm.dll의 경로(JRE/bin/server에 있음)를 쓰면 된다. ‘시작_클래스’는 말그대로 application의 entry point가 될 class를 지정하는 것이다. public static void main(String [])가 있는 Class 이름을 지정하면 되겠다.
JavaService -install “MyApp Service” $JAVA_HOME$/bin/server/jvm.dll서비스 이름 중간에 공백을 쓰려면 위와 같이 따옴표(”)로 싸야 한다. 또한 jvm.dll의 경로는 절대경로로 써야한다. 위 명령을 수행하는 디렉토리에 대한 상대경로로 쓰면, 실제 NT Service로 JavaService가 실행될 때의 작업경로와 다르기 때문에 서비스가 정상적으로 수행되지 못한다. 마찬가지로 entry point가 될 class는 환경변수의 CLASS_PATH에 있거나, -Djava.class.path 옵션을 JVM option으로 지정해주어야 한다.
-start net.oddpoet.MyApp
추가적인 명령행 옵션은 다음과 같다.
-description service_desc
서비스에 대한 설명.
-current current_dir
서비스의 작업 디렉토리 지정
-method start_method
서비스 시작시 실행될 start_class의 메소드(default:main). ‘-start start_class’ 바로 다음에 와야한다.
Java Application를 excutable jar로 만들었다면, 다음과 같이 NT 서비스로 등록할 수 있다.
JavaService -install "MyApp Service" $JAVA_HOME$/bin/server/jvm.dllNT 서비스로 정상적으로 등록되었는지는 다음 명령으로 확인할 수 있다.
-Djava.class.path=myApp.jar -start net.oddpoet.MyApp -current D:/myapp
-description "Example of JavaService"
(참고로 윈도우2000에는 sc.exe가 없다. XP나 윈2003부터 제공되는 툴이다.)
sc query "MyApp Service"
3. NT Service에서 제거
NT Service로 등록된 Java app.를 제거하는 방법은 다음과 같다.
JavaServcie -uninstall "MyApp Service"등록할 때 사용했던, 서비스 이름을 써야한다는 점에 유의하자. 만약 현재 그 서비스가 실행중이라면, 서비스를 먼저 종료시켜야만 서비스에서 정상적으로 제거된다. 스크립트로 만든다면 위의 uninstall 명령 앞에 다음과 같이 서비스를 stop시키는 명령을 먼저 실행시키면 된다.
sc stop "MyApp Service"
댓글을 달아 주세요