4. systemd로 서비스 등록
1. 시나리오
서버에 스프링 부트 애플리케이션을 배포했지만, 서버가 재부팅될 경우, 매번 수동으로 프로세스를 다시 실행해야 함
따라서 서버 시작 시 특정 프로세스를 자동 실행 하거나, 중간 프로세스 종료 시 자동 재시작 되도록 하기 위해서는 systemd를 활용할 수 있음
1. systemd
- 현대 Linux 운영체제의 프로세스 초기화(init) 시스템 및 서비스 매니저
- 부팅 시 서비스 자동 시작, 상태 확인, 재시작 정책, 로그 관리 가능
- nohup보다 관리 용이, 단일 명령으로 서비스 시작/정지/재시작 가능
2. 실습 준비
systemd 실습에 활용할 스프링 부트 애플리케이션(.jar) 준비
cd ~/apps/myapp
ls -l myapp.jar
chmod +x myapp.jarJAR 파일을 실행 가능하게 설정해야 systemd가 실행 가능
+x, -x 차이
+는 권한을 추가, -는 권한을 빼는 것
2-1. 서비스 유닛 파일 생성
sudo nano /etc/systemd/system/myapp.serviceExecStart에는 자신이 실행할 실제 .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.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에 등록하고 실행함
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl status myapp
sudo systemctl enable myappsystemctl 각 명령어 설명
daemon-reload: systemd 새 서비스 인식
start: 서비스 즉시 시작
status: 서비스 상태 확인
enable: 부팅 시 자동 시작
2-3. 중간에 죽은 프로세스가 있는지 테스트
sudo pkill -f myapp.jar
sudo systemctl status myapp→ Restart=always 옵션을 통해 프로세스 종료 시 자동으로 재시작되는지 확인하기
등록된 서비스 로그 확인 하기
journalctl -u myapp.service -n 50
journalctl -u myapp.service -f→ 특정 서비스 로그 확인, 실시간 로그 tail 가능