Linux Spring Boot jar 파일 서비스 등록 자동실행
서비스 등록을 위한 설정 파일 작성하기
우선 자동실행되게 하기 위해서는 해당 jar 파일을 리눅스로 되어 있는 서버에 서비스 등록해야 한다.
이 서비스 등록은 우선 서비스 설정 파일을 만들어야 가능하다.
아래 명령어를 통해 서비스 등록 파일을 해당 위치에 작성해준다.
(vi가 아니라 vim이 설치 되어 있다면 vim을 사용해도 된다.)
vi /etc/systemd/system/${service name}.service
파일작성기에 아래 내용을 작성한다.
[Unit]
Description=Service Description
After=syslog.target network.target postgresql.service
[Service]
ExecStart=/bin/bash -c "exec java -jar /usr/local/server/test.jar"
Restart=on-failure
RestartSec=10
User=root
Group=root
[Install]
WantedBy=multi-user.target
1. [Unit]
1.1 Description
Description=Service Description
이건 말 그대로 해당 서비스에 대한 설명이다. 추후 서비스를 실행하고 서비스의 status를 확인했을 때 표시되는 등 해당 서비스가 어떤 서비스인지에 대해 설명을 작성하면 된다.
1.2 After
After=syslog.target network.target postgresql.service
서비스가 언제 실행될지에 대해 정할 수 있는 부분이다. 서비스가 실행되기 전에 먼저 설정되어야하는 것들이나 실행되어야 하는 것들이 있을 경우 설정한다.
- syslog.target: 시스템 로그 관련된 것이 잘 설정된 후를 의미한다.
- network.target: 네트워크가 연결된 후를 의미한다.
- postgresql.service: 이 부분은 커스텀으로 넣은 부분으로 백엔드 서버가 postgresql DB와 연결해서 사용하는지라 postgresql 서비스가 시작된 후를 위해서 넣어봤다.
2. [Service]
2.1 ExecStart
ExecStart=/bin/bash -c "exec java -jar /usr/local/server/test.jar"
이 부분이 바로 jar 파일을 실행시키는 부분이다. '/bin/bash -c'를 입력하고 "exec "(쌍따옴표) 뒤에 해당 jar 파일을 실행시키는 명령어를 입력하면 된다. 참고로 현재까지 jar 파일을 수동으로 실행시킬 때는 백그라운드에서 실행시키기 위해서 nohup과 &를 사용했었는데 여기서는 그럴 필요 없이 그냥 입력해주면 된다.
2.2 Restart
Restart=on-failure
서비스가 언제 다시 시작할지에 대한 것을 설정할 수 있는 부분이다.
'on-failure'는 서비스를 실행시키는데 실패하면 다시 시작시키겠다는 의미의 설정이다.
그 밖에 'always'와 같은 다른 설정도 있다. 참고로 'always'의 경우는 서비스가 정상 종료되었다 해도 'on-failure'와 다르게 다시 시작하겠다는 뜻이다.
기본 값은 no로 서비스를 재시작하지 않겠다고 설정되어 있다.
2.3 RestartSec
RestartSec=10
서비스를 다시 시작하기 전에 몇 초동안 잠시 기다릴지에 대한 설정이다. 나는 10초로 조금 텀을 뒀지만 1초로 설정해놔도 무방하다.
기본 값은 100ms이다.
2.4 User, Group
User=root
Group=root
이건 해당 서비스를 실행하기 위한 권한이다.
3. [Install]
3.1 WantedBy
WantedBy=multi-user.target
서비스 run level을 설정하는 부분이다. 'multi-user.target'로 설정하면 다중 사용자로 설정된다.
작성한 서비스 설정파일로 서비스 등록하기
위의 설정파일을 작성 완료 한 후 ESC > wq를 입력하고 엔터를 치면 파일 작성이 완료된다.
그 후에 아래 명령을 치면 리눅스에서 서비스 파일들을 읽고 자동으로 새로 생긴 서비스의 경우 서비스 등록을 해준다.
daemon-reload
서비스 재시작
위 'daemon-reload' 명령어로 서비스를 등록해주고 서비스를 재시작해준다.
참고로 작성한 파일 명 그대로 '${서비스명}.service'으로도 명령어를 사용할 수 있고 '${서비스명}'으로도 명령어를 사용할 수 있다.
systemctl restart ${서비스명}
현재 구동되는 서비스들 목록 조회
서비스 등록을 정상적으로 등록됐다면 현재 서비스들의 리스트를 조회했을 때 해당 리스트에서 등록한 서비스를 확인할 수 있다.
아래 명령을 쳐서 서비스 리스트를 확인할 수 있으며 서버가 재부팅 되었을 때 서비스가 자동으로 시작되는지의 여부도 확인할 수 있다.
systemctl -t service list-unit-files

위 명령어나 위의 리스트에서 나온 것들에 대해서는 다 공부하지는 못했지만 STATE 부분이 enabled 되어 있을 경우 서비스가 서버 리부팅시 재시작 된다.
만일 등록한 서비스가 disabled로 설정되어 있다면 아래 명령어를 통해 enabled로 설정해주면 된다.
systemctl enable ${서비스명}
서비스 명령어(+ 상태 확인하기)
등록된 서비스는 아래 명령어로 다룰 수 있다.
1. 서비스 시작
systemctl start ${서비스명}
2. 서비스 재시작
systemctl restart ${서비스명}
3. 서비스 종료
systemctl stop ${서비스명}
4. 서비스 상태 확인하기
systemctl status ${서비스명}
'systemctl status ${서비스명}'을 치면 아래와 같이 해당 서비스 상태를 확인할 수 있다.
서비스 설정 파일에 지정해놓은 Description도 볼 수 있고 해당 서비스가 제대로 돌아가고 있는지도 확인할 수 있다. 이를 통해 내가 서비스 설정 파일을 잘 등록했는지도 확인할 수 있고, 서비스에 다른 문제가 없는지 확인할 수 있다.
