지난 시간에는 NodeJS 서버를 사용할 때 이를 리눅스 서버에 배포 시 프로세스를 관리하는 도구인pm2에 대해 정리해보았다. 이번 시간에는 비슷한 성격이지만 Java 언어를 사용할 때 서버를 다루는 systemd에 대해 알아볼 것이다.
systemd란, 리눅스에서 서버 프로그램을 자동으로 실행, 중지, 재시작해주는 기본 서비스 관리자라고 할 수 있다. 노드에서 pm2의 역할과 동일한데, 사실 노드의 pm2를 OS레벨로 마든게 systemd라고 보면 된다고 한다.
systemd를 한 줄로 요약하면, .jar 파일을 리눅스 시스템의 정식 구성원으로 등록시켜주는 도구이다. 그리고 그 외에도 위와 같은 역할들을 수행한다.
리눅스 시스템 서비스 설정 디렉토리에 .service파일을 생성한다. 이 때 루트 권한이 필요하다.
sudo vi /etc/systemd/system/myapp.service
[Unit]
Description=Java Spring Boot Application
After=network.target
[Service]
# 애플리케이션을 실행할 사용자 (보안상 root 권한보다 별도 계정 권한 권장)
User=ubuntu
# 애플리케이션 경로
WorkingDirectory=/home/ubuntu/app
# 실행 명령어 (절대 경로 사용 권장)
ExecStart=/usr/bin/java -jar /home/ubuntu/app/application.jar
# 프로세스가 죽었을 때 재시작 설정
Restart=always
RestartSec=10
# 로그 설정
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
sudo systemctl status myapp
`pm2`의 `pm2 status(pm2 list)` 와 같은 역할이다.
journalctl -u myapp
journalctl -u myapp -f
journalctl을 통해 로그를 관리한다. pm2의 pm2 logs와 같은 역할이다.
새 버전의 .jar 파일을 업로드한 후에는 아래 명령어로 간단히 재시작하면 된다.
sudo systemctl restart myapp