본문 바로가기
Cloud

aws ec2 Ubuntu의 systemd에 Java application을 Service로 등록

by Ahngyuho 2023. 8. 2.

이번 포스팅은 aws ec2 Ubuntu 22.04 버전 인스턴스에 제가 만든 자바 애플리케이션을 service로 등록하는 방법에 대해 알아보는 내용입니다.

 

진행 동기

IntelliJ IDEA로 aws ec2 인스턴스에 ssh 연결 후 jar 파일을 실행하는 방법으로 배포를 한 적이 있었습니다.

 

https://agh-dev.tistory.com/10

 

Spring boot 애플리케이션 ec2에 jar로 배포

진행 동기 현재 프로젝트는 웹 서버의 access log를 필요로 합니다. 그래서 ec2에 Java를 설치하고 jar 파일을 실행하여 Nginx와 연동해서 access log를 저장할 예정입니다. 우선 이번 포스팅의 주제는 ec2

agh-dev.tistory.com

문제점이 하나 있었는데 만약 IntelliJ IDEA를 끄거나 ssh 연결이 끊기면 애플리케이션이 종료된다는 점이었습니다.

그래서 찾아낸 해결책이 Java 애플리케이션을 service로 등록해서 지속적으로 실행하려고 합니다.

 

systemd란?

systemd 는 Linux 운영 체제용 시스템 및 서비스 관리자입니다. 이는 SysV init 스크립트와 역호환되도록 설계되었으며 부팅 시 시스템 서비스의 병렬 시작, 필요에 따라 데몬 활성화 또는 종속성 기반 서비스 제어 논리와 같은 여러 기능을 제공합니다. Red Hat Enterprise Linux 7에서 systemd는 Upstart를 기본 init 시스템으로 대체합니다.

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/7/html/system_administrators_guide/chap-managing_services_with_systemd

 

10장. systemd를 사용하여 서비스 관리 Red Hat Enterprise Linux 7 | Red Hat Customer Portal

Access Red Hat’s knowledge, guidance, and support through your subscription.

access.redhat.com

 

이 systemd에 제가 만든 애플리케이션을 서비스로 등록해서 systemd가 관리하도록 하려고 합니다.

 

서비스 등록 설정 파일 및 서비스 실행

해당 디렉토리에 사용자 정의 서비스 설정 파일을 정의해주면, systemd가 서비스로 관리해 줍니다.

cd /etc/systemd/system
sudo vi javaapp.service

[Unit]
Description=modetec
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/ubuntu
ExecStart=/usr/bin/java -jar modetec-0.0.2-SNAPSHOT.jar
Restart=on-failure

[Install]
WantedBy=multi-user.target

저는 jar 파일을 통해 Java 애플리케이션을 띄울것이기 때문에 jar 실행 기준으로 설정 파일을 작성했습니다.

 

  • WorkingDirectory=jar 파일이 존재하는 폴더 주소 작성
  • ExecStart=/usr/bin/실행 명령어 작성 ex) java -jar modetec-0.0.2-SNAPSHOT.jar
설정 파일 재로딩
sudo systemctl daemon-reload

------------------------------------------------
실행은 항상 작성된 파일 명을 적어주셔야 합니다.

재부팅 시 해당 시스템 자동 실행
sudo systemctl enable modetec.service

실제 시스템 실행
sudo systemctl start modetec.service

 

이렇게 active로 되어 있으면 성공적으로 잘 실행된 것입니다.

 

정리

이렇게 서비스로 등록하여 제 로컬 pc에서 세션이 끊겨도 애플리케이션이 동작하도록 해봤습니다.

사실 nohup을 사용해서 백그라운드로 실행하는 방법도 있으나 이번 포스팅에서는 제가 찾은 방법을 실행하면서 기록해둔 것을 정리해봤습니다. 다음에는 nohup을 이용하는 방법도 해보며 기록해두고 포스팅 해보겠습니다.

 

'Cloud' 카테고리의 다른 글

[ansible] ansible 사용해보기  (0) 2025.03.20
[Docker-compose]  (0) 2025.03.10
[Docker] Docker 란?  (0) 2025.03.10
Amazon S3  (0) 2025.02.16