본문 바로가기
Java/Tip

JAR파일 NSSM으로 윈도우 서비스 등록시에 실행 실패하는 케이스

by 크라크라 2022. 7. 7.

서비스 연동을 위해서 실행가능한 JAR 파일을 윈도우 서버에서 실행해야할 필요가 있었습니다. 

일반적으로 권하는 방식은 .bat 파일에 JAR 파일을 실행하는 코드를 넣어두고 .bat 파일을 윈도우 서비스에 등록하는 것이었는데요. 

 

일반적으로 bat 파일은 실행 가능파일이 아닌, 일종의 텍스트 파일이어서 윈도우 서비스에 등록은 되더라도 실행은 되지 않는 경우가 생깁니다. 혹은 실행은 되나 의미없이 끝나버립니다. 

 

JAR 파일의 경우에 간단하게 다음과 같은 형태로 .bat 파일을 작성할 수 있는데요. ( 물론 필요에 따라 뒤에 여러 옵션을 붙일 수 있습니다.)

@echo off
java -jar xxx.jar

 

NSSM 이라는 프로그램이 해당 작업을 지원해줍니다. 링크된 곳으로 가시면 다운 받을 수 있습니다. 

아주 간단한 사용법은 여러 블로그 및 공식 홈페이지에서 확인하실 수 있습니다. 

 

문제는 이렇게 NSSM 을 통해서 jar 파일을 정상적으로 윈도우 등록까지 마쳤음에도 불구하고 실행이 되지 않고 개발서버에서 윈도우 서비스 실행시에 오류가 나는 것이었습니다. 바로 아래처럼 말이죠. 

 

이벤트 뷰어를 통해서 확인해 본 결과 특별한 오류를 찾을 수 없었습니다. 실제로 커맨드 창에서 JAR 파일을 실행하거나 bat 파일을 더블클릭해서 실행시켰을 때는 잘 동작했고, 제 로컬 환경(윈도우 10)에서는 문제 없이 동작했기 때문에 더 이상했었죠. 그래서 회사에서 가용한 여러 서버들에서 테스트를 해보았습니다. 

 

- Server 2012 R2            : 실패

- Server 2016 Standard  : 성공

- Server 2019 Standard  :  성공

 

제가 딱 테스트하던 그 환경에서만 에러가 나고 있었습니다. 차이를 비교해보니 Server 2012 R2에서만 다음과 같은 오류를 생성하면서 제대로 된 실행을 못하고 있었습니다. 

 

NSSM은 실행 관련한 오류를 추적할 수 있는 방법을 제공하는데요. 기본적으로 NSSM 의 사용법을 따라서 서비스를 등록하면 여러 값들이 자동으로 설정됩니다. 특별히 설정해야하는 값들은 모두 빈 값으로 남아있죠. 

 

이러한 추가 설정을 커맨드로도 할 수 있고 GUI로도 할 수 있는 기능을 제공하고 있습니다. 커맨드는 추후에 별도로 보고 GUI로 사용하기 위해서는 다음을 cmd 창에 입력하면 됩니다. 

nssm edit "Your ServiceName"

 

그 중 I/O 탭에 있는 Error(stderr) 에 원하는 위치의 txt / log 등을 설정해주시면 됩니다. 

 

 이렇게 해서 오류를 확인해보니 다음과 같이 출력되었습니다. Java의 환경설정이 되어있음에도 Java 환경 설정을 못가져오는 것이었죠.

'java'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

 

해당 윈도우 서버 OS버전의 문제인지, 해당 서버 자체의 문제인지는 파악할 수 없었지만, NSSM이 추가로 환경설정을 할 수 있는 기능을 제공하기 때문에 거기에서 환경설정을 새로 잡아주었습니다. 

 

 

이런 식으로 Environment 탭으로 들어가 환경변수에 JAVA_HOME 과 PATH를 잡아주었습니다. 이후에 서비스를 실행하니 정상적으로 JAVA를 찾아서 실행되는 것을 확인할 수 있었습니다. 

 

 

 

이런 특수한 케이스의 오류가 공유된 블로그는 못 본 것 같아서 글을 남깁니다. 

글 읽어주셔서 감사합니다.

'Java > Tip' 카테고리의 다른 글

gson 라이브러리 사용시 NoSuchMethodError  (1) 2023.10.05

댓글