코딩 범고래의 해저동굴

ubuntu 14 버전에서init.d를 사용하여 jar 파일 서비스 등록하기 본문

Dev Ops

ubuntu 14 버전에서init.d를 사용하여 jar 파일 서비스 등록하기

코딩범고래 2022. 7. 22. 11:33

docker 내 container로 ubuntu 14를 돌리는데, 

컨테이너 내부에 있는 우분투에서

.service 파일을 등록한 뒤  service를 reload 하기 위해 systemctl을 사용하려고 하니

 

Failed to get D-Bus connection: No connection to service manager.

라는 메세지와 함께 실행이 안되었다.

 

이는 컨테이너를 실행할 때 --privileged  옵션을 사용 안했기 때문인데

현재 구축해 놓은 우분투 컨테이너를 지우고 다시 작업하려니 정신이 아찔해져서

다른 방법을 찾기로 했다.

 

바로 init.d를 사용하는 것인데,

 

 

cd /etc/init.d

경로를 이동해 준 뒤,

새로운 파일을 만들어준다

 

vim [등록할 서비스명]
예) vim testProject

이후 상황에 맞는것으로 해당 파일에 입력해주면 된다

 

[.sh 파일 예시]

#!/bin/bash

### BEGIN INIT INFO
# Provides:        tomcat7
# Required-Start:  $network
# Required-Stop:   $network
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: Start/Stop Tomcat server
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

start() {
 sh /usr/share/tomcat7/bin/startup.sh
}

stop() {
 sh /usr/share/tomcat7/bin/shutdown.sh
}

case $1 in
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac

 

[.jar 파일 예시]

#!/bin/bash

### BEGIN INIT INFO
# Provides:        tomcat7
# Required-Start:  $network
# Required-Stop:   $network
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: Start/Stop Tomcat server
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

start() {
 nohup java -jar /home/testProject-0.0.1-SNAPSHOT.jar &
}

stop() {
 kill -9 `ps -ef | grep testProject-0.0.1-SNAPSHOT.jar | awk '{print $2}'`
}

case $1 in
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac

참고로 jar파일은 로컬에서 maven으로 spring-boot 프로젝트를 빌드한 파일이다

 

이후 해당 파일의 권한을 변경해준다

chmod 755 /etc/init.d/[서비스명]
예) chmod 755 /etc/init.d/testProject

 

그런 뒤 서비스를 등록 한 뒤,

update-rc.d [등록한 서비스명] defaults
예) update-rc.d testProejct defaults

 

서비스를 실행해 보자

 

service [방금 등록한 서비스명] start
예) service testProject start

 

내가 생성한 service는 jar파일을 백그라운드에서 돌리게끔 nohub 으로 실행해 주었기에

아래와 같은 메세지로 나온다.

nohup: appending output to 'nohup.out'

 

이후 프로세스를 확인해보면 된다. 

ps -ef

 

끄읕

Comments