관리 메뉴

제뉴어리의 모든것

jar 파일 ubuntu에서 서비스 등록하기 본문

추후 정리 필요

jar 파일 ubuntu에서 서비스 등록하기

제뉴어리맨 2022. 10. 30. 04:16

전체 항목

  • jar파일로 배포를 위한 준비 자료
  • 배포 과정
  • 서비스의 로그 확인

jar파일로 배포를 위한 준비 자료

  • jar 빌드 파일
  • service 파일
  • 환경변수 파일

 

jar 빌드 파일

Spring Boot 에서 빌드를 한다.

libs 폴더에 .jar 파일이 생성된다.

 

 

service 파일

아래의 명령어를 실행하여서 service 파일을 만들고

아래의 스크립트내용을 참고하여 작성한다.

 

sudo vi /etc/systemd/system/[서비스명].service 

 

 

myapp.service

[Unit]
Description=myapp start //서비스 설명
 
[Service]
EnvironmentFile=/home/ubuntu/myapp.conf //내 서비스에서 필요한 환경 변수가 등록되어 있는 파일 경로 
ExecStart=/bin/bash -c "exec java -jar /home/ubuntu/server-0.0.1-SNAPSHOT.jar" //이 서비스가 시작될 때 실행되는 인수가 있는 명령
 
[Install]
WantedBy=multi-user.target //서비스의 대상

 

  • ExecStart=/bin/bash -c "exec java -jar /home/ubuntu/server-0.0.1-SNAPSHOT.jar" 에 대한 이해

    /bin/bash -c            =>             /bin 디렉토리에 있는 bash를 실행하면서 c 옵션을 줌.
    "exec java -jar /home/ubuntu/server-0.0.1-SNAPSHOT.jar"                    =>                      c옵션에서 사용될 인자값

  • WantedBy=multi-user.target         =>        해당 서비스는 SysVinit systems 런레벨 3, 4 및 5 에서 시작해야 한다는 의미인데, 쉽게 생각해서 일반적인 환경에서 모두 돌아가는 서비스라고 정의를 해둔것이라고 생각하자.

 

+ bash의 c 옵션이란?

예를 들어,

c를 사용하면 인자로 들어오는 값을 코드로써 인식하고 실행하지만,

c를 사용하지 않으면 인자로 들어오는 값을 파일명으로써 인식한다.

 

 

 

환경변수 파일

아래의 파일의 위치는 상관없다.

 

myapp.conf

DB_RDS_SERVER=[rds url]:[RDS포트]/[DB 명]?serverTimezone=UTC&characterEncoding=UTF-8 //DB_RDS_SERVER 변수 설정
JWT_SECRET_KEY=[시크릿값] //JWT_SECRET_KEY 변수 설정

 

 

배포 과정

 

  • 프로젝트 빌드 하여 jar 파일 생성

- 홈 경로에 jar 파일 이동 시킴 (파일질라 사용)

 

 

  • conf 파일 생성

- cd ~ : 홈 경로로 이동

- (홈 경로에) vi myapp.conf : 환경변수 설정 파일 생성
- conf 파일 내용 기입

 

 

  • service 파일 생성

-  sudo vi /etc/systemd/system/myapp.service : 서비스 설정 파일 생성

- service 파일 내용 기입

 

 

  • 컴퓨터(ec2) 재부팅시 자동으로 서비스 구동하도록 서비스등록

sudo systemctl enable myapp.service

 

 

  • service 구동 여부 확인

sudo systemctl status myapp.service

 

 

 

  • service 구동 안되어 있으면 구동

sudo systemctl start myapp.service

 

 

 

+ 구동 정지

sudo systemctl stop myapp.service

 

sudo systemctl 

 

 

 

+ 만약 .service 파일의 내용이 변경이 되었을때

아래의 명령어를 입력하여 설정파일 reload

sudo systemctl daemon-reload

 

 

 

서비스의 로그 확인

  • 기본 내림차순 로그 (제일 첫번째 로그부터 최근 순서대로 아래쪽 출력)

journal -u [서비스명]

EX ) journal -u myapp.service

 

 

  • 역순 로그 (가장 최근 로그부터 출력하여 이전 로그들을 아래쪽 출력)

journal -u [서비스명] -r -n [가져올 로그 라인 수]

EX ) journalctl -u sshd.service -r -n 1

 

 

 

 

 

 

 


참조 

 

 

 

아래의 사이트들 중 하나만 똑같이 따라해선 안됨. 

각각의 사이트를 보고 .service 파일 내의 속성이라던가 잘 봐야함.

 

https://serverfault.com/questions/413397/how-to-set-environment-variable-in-systemd-service%EF%BB%BF

 

 

 

https://hello-gg.tistory.com/55

 

Ubuntu에 Spring boot 서비스 등록하기

학교 실습할때 서비스등록은 무조건 해줬던 것 같다. 그만큼 기본이라는 이야기같기도 🤔 그때는 뭔지도 잘 모르고 그냥 하라고 해서 했는데,, 막상 혼자하니 아주 조큼 귀찮다. 하지만 그때로

hello-gg.tistory.com

 

https://dzone.com/articles/run-your-java-application-as-a-service-on-ubuntu

 

Run Your Java App as a Service on Ubuntu - DZone Java

By using a service wrapper, you can get your Java app's JAR file running on Ubuntu, including configurations for automatically starting and logging tips.

dzone.com

 

https://honeyinfo7.tistory.com/314

 

SpringBoot 프로젝트 Ubuntu 서비스에 등록하기

배포한 SpringBoot 프로젝트를 Ubuntu서비스에 등록하고 싶어졌다. 의외로 방법은 간단하다. 서비스를 등록하기 위해서 아래와같이 .service로 끝나는 파일을 만든다. sudo vi /etc/systemd/system/humor-api.serv..

honeyinfo7.tistory.com

https://serverfault.com/questions/413397/how-to-set-environment-variable-in-systemd-service

 

 

 

journalctl 명령어 관련 참조 :

https://www.loggly.com/ultimate-guide/using-journalctl/

https://www.lesstif.com/system-admin/linux-journalctl-82215080.html