winsw log 서비스

강정우·2024년 2월 2일
1

Dev_Ops

목록 보기
9/20

winsw란?

WinSW는 Windows Service Wrapper의 줄임말이다.
이는 Java로 작성된 애플리케이션을 윈도우 서비스로 실행할 수 있도록 도와주는 도구이다.
이를 통해 애플리케이션의 시작, 중지, 재시작 등의 서비스 생명주기 관리를 쉽게 할 수 있다.

WinSW는 XML 설정 파일을 통해 구성되며, 이 설정 파일에서 애플리케이션의 실행 경로, 인수, 작업 디렉토리, 서비스 이름 등을 지정할 수 있다. 이러한 설정을 통해 애플리케이션이 윈도우 서비스로 실행될 때 필요한 세부 사항들을 지정해 줄 수 있다.

또한, 우리는 이 기능을 사용할 것인데 바로 로그 관리 기능이다.
이를 통해 애플리케이션의 표준 출력 및 에러 출력을 로그 파일로 리다이렉션할 수 있다.
이는 어플리케이션의 문제를 진단하고 해결하는데 매우 유용하다.

winsw 설치

winsw github에 들어가서 베타 버전 말고 정식 버전 중 가장 최신 버전을 받아준다.

나는 sample-minimal.xml, WinSW-x64.exe 를 받아줬다.

winsw 설정

1. config (xml 파일 설정)

위에서 받은 sample-minimal.xml 을 설정해줘야한다.

참고는 config 파일 설정 페이지를 들어가서 확인해보면 된다.

간략하게 위 xml 파일을 설명해주자면

  • id: 서비스 id, id니까 unique
  • name: 서비스에 뜰 name
  • description: 말 그대로 설명
  • env: 이 태그는 환경 변수를 설정하는데 사용된다.
    'name' 속성은 환경 변수의 이름을 지정하고,
    'value' 속성은 환경 변수의 값을 지정한다.
    'JENKINS_HOME' 환경 변수를 '%BASE%' 값으로 설정하였다. 그래서 <logpath>%BASE%\logs</logpath> 이런식으로 줘도 되나 혹시 안 먹는다면 아래 예시처럼 구체적인 경로를 잡아줘버리면 100% 먹는다.
  • executable: 이 태그는 서비스가 실행할 실행 파일의 이름을 지정
  • arguments: 이 태그는 실행 파일에 전달될 인수를 지정
    여기서는 Java 가상 머신에 전달될 옵션과 함께 Jenkins WAR 파일의 경로와 HTTP 포트를 지정
  • log: 이 태그는 로그 설정을 지정
    'mode' 속성은 로그 파일의 관리 방식을 지정한다.
    'roll'은 각 로그 파일이 일정 크기에 도달하면 새로운 로그 파일을 생성하는 방식을 의미한다.
<?xml version="1.0" encoding="UTF-8"?>
<service>
  <id>프로젝트_ID</id>
  <name>프로젝트_Name (powered by KJW)</name>
  <description>프로젝트 설명</description>
  <executable>C:\Program Files\ojdkbuild\java-17-openjdk-17.0.3.0.6-1\bin\java.exe</executable>
  <arguments>-Xrs -Xmx256m -jar "C:\본인이 설치한 jar 파일 경로\web-backend-1.0.0.jar"</arguments>
  <onfailure action="restart" />
  <logpath>C:\본인이 설치한 jar 파일 경로\logs</logpath>
  <logmode>roll</logmode>

  <log mode="roll">
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern>
    <sizeThreshold>10240</sizeThreshold>
    <keepFiles>10</keepFiles>
    <file>C:\본인이 설치한 jar 파일 경로\logs\프로젝트이름.log</file>
    <error>C:\본인이 설치한 jar 파일 경로\logs\프로젝트이름.err.log</error>
  </log>
</service>

참고로 java 경로는 이렇게 상세하게 잡아주면 더 좋다.

로그 모드와 한계값* 설정

로그 모드 페이지를 가보면 확인할 수 있다.

*한계값이란 로그가 지정한 메모리를 넘으면 뒤에서부터 순차적으로 삭제해 나가는 것이다.

.xml 파일 설정 예

2. winsw.exe 가져오기

아까 winsw github에서 받은 winsw.exe를

설정 해 놓은 곳에 이동시키고 위에서 작성한 .xml과 같은 이름으로 변경한다.

winsw command

winsw command 페이지에 가보면 여러 커맨드들이 있다.

뭐 install 은 어떤 옵션을 주고 서비스를 설치할 것인지, 또 어떤 옵션으로 시작할 것인지 등등..

순서는 install -> start로 진행한다.

또 yml 파일의 설정이 바뀌면 재시작을 하고

xml 옵션이 바뀌면 삭제하고 다시 install 하면 된다.

install & start

반드시 PowerShell 에서 실행해야한다.
CMD 와 PowerShell 은 명령어와 앨리어스, 스크립팅 언어 지원 수준, 파이프라인 등 에서 굉장히 차이가 나기 때문에 반드시 PowerShell 에서 실행하길 바란다.

  1. 그리고 명령어를 통해 option을 .xml으로 지정해주면

  1. 마지막으로 start로 서비스를 시작해주면 된다.

로그 보는 법

아까 .exe 가 설치되고 서비스가 시작되면 xxx.out.log 파일이 생성이 되는게 해당 path에 가서 아래 명령어를 입력하면 된다.

Get-Content -Wait -Encoding UTF8 -Tail 1000 .\xxx.out.log

Get-Content 관련 옵션은 MS 홈페이지에 잘 설명되어있다.

서비스 삭제하는 법

참고로 서비스 등록이 이상하게 되어 삭제하고 다시 등록하려면

sc delete 서비스이름

명령어를 넣어주면 된다.

참고로 서비스 삭제는 CMD 에서 해야지 POWERSHELL 에서 하면 그냥 delete 라는 파일이 생성되고 실제 서비스가 삭제되진 않는다.

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글