Skip to Content
Suffering builds character
아카이브24.Linux실습서비스 관리4. systemd로 서비스 등록

4. systemd로 서비스 등록

1. 시나리오

서버에 스프링 부트 애플리케이션을 배포했지만, 서버가 재부팅될 경우, 매번 수동으로 프로세스를 다시 실행해야 함

따라서 서버 시작 시 특정 프로세스를 자동 실행 하거나, 중간 프로세스 종료 시 자동 재시작 되도록 하기 위해서는 systemd를 활용할 수 있음

1. systemd

  • 현대 Linux 운영체제의 프로세스 초기화(init) 시스템 및 서비스 매니저
  • 부팅 시 서비스 자동 시작, 상태 확인, 재시작 정책, 로그 관리 가능
  • nohup보다 관리 용이, 단일 명령으로 서비스 시작/정지/재시작 가능

2. 실습 준비

systemd 실습에 활용할 스프링 부트 애플리케이션(.jar) 준비

terminal
cd ~/apps/myapp ls -l myapp.jar chmod +x myapp.jar

JAR 파일을 실행 가능하게 설정해야 systemd가 실행 가능

💡
Tip

+x, -x 차이
+는 권한을 추가, -는 권한을 빼는 것

2-1. 서비스 유닛 파일 생성

terminal
sudo nano /etc/systemd/system/myapp.service

ExecStart에는 자신이 실행할 실제 .jar 파일 경로가 있어야 함

[Unit] Description=My Spring Boot Application After=network.target [Service] User=myuser ExecStart=/usr/bin/java -jar /home/myuser/apps/myapp/myapp.jar # 실행할 .jar 파일 경로 SuccessExitStatus=143 Restart=always RestartSec=5 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
Note

.service 파일 설명

.service 파일에는 Unit/Service/Install 블록 설정, 사용자, 실행 명령, 재시작 정책, 로그 설정 등을 포함함

[Unit]
서비스 설명, 다른 서비스 실행 이후 시작 여부 지정 (After=network.target)

[Service]
실제 실행 정보

User: 프로세스를 실행할 사용자
ExecStart : 실제 명령어
Restart: 프로세스 종료 시 자동 재시작(always)
StandardOutput/StandardError : 로그를 systemd journal에 기록
[Install] : 부팅 시 자동 시작 설정
(WantedBy=multi-user.target)

2-2. 서비스 등록 및 실행

작성한 myapp.service를 systemd에 등록하고 실행함

terminal
sudo systemctl daemon-reload sudo systemctl start myapp sudo systemctl status myapp sudo systemctl enable myapp
Note

systemctl 각 명령어 설명

daemon-reload: systemd 새 서비스 인식
start: 서비스 즉시 시작
status: 서비스 상태 확인
enable: 부팅 시 자동 시작

2-3. 중간에 죽은 프로세스가 있는지 테스트

terminal
sudo pkill -f myapp.jar sudo systemctl status myapp

→ Restart=always 옵션을 통해 프로세스 종료 시 자동으로 재시작되는지 확인하기

💡
Tip

등록된 서비스 로그 확인 하기

terminal
journalctl -u myapp.service -n 50 journalctl -u myapp.service -f

→ 특정 서비스 로그 확인, 실시간 로그 tail 가능

Last updated on