일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- appspec.yml
- foreignkey
- AuthenticationEntryPoint
- 적용우선순위
- Query
- 테스트메소드
- ubuntu
- docker명령어
- querydsl
- 메소드명
- 네이티브쿼리
- application.yml
- 컨테이너실행
- 외부키
- subquery
- 메세지수정
- 참조키
- WeNews
- 포트
- 커밋메세지수정
- 테스트
- MySQL
- 2 > /dev/null
- EC2
- 예약
- 추후정리
- ㅔㄴ션
- 서브쿼리
- 검색
- appspec
- Today
- Total
제뉴어리의 모든것
jar 파일 ubuntu에서 서비스 등록하기 본문
전체 항목
- 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
- 등록된 전체 서비스 목록 보기 (참조 : https://fabxoe.tistory.com/130)
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
https://dzone.com/articles/run-your-java-application-as-a-service-on-ubuntu
https://honeyinfo7.tistory.com/314
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