Linux/기타

systemd에 서비스 등록하기(서비스 자동 실행 & 모니터링 설정)

miracle21 2025. 3. 14. 10:16
반응형

 

 

스크립트 파일로 관리하던 서비스를 systemd에 등록해서 관리하는 방식으로 바꾸려고 한다.

 

 

AS-IS

- systemd가 아닌, 백그라운드 프로세스로 돌고있는 서비스

- 서비스 및 서버가 다운될 경우 자동 재시작 불가

- 서비스가 재시작 될 때 날짜와 시간을 수동으로 관리해야 함

 

TO-BE

- 서비스가 동작하지 않고있으면 실행시켜주는 모니터링 systemd service를 등록

- 서비스가 중지될 경우 자동으로 재시작해줌

- 서비스가 재시작 될 때 날짜와 시간을 log 파일로 기록

- systemd service를 enable로 설정해서, 서버 재시작 시 모니터링 서비스도 자동으로 시작됨

 

 

 

필요한 작업은 다음과 같다:

1. 서비스 스크립트 파일(`service.sh`)

2. 모니터링 스크립트 파일(`monitor.sh`)

3.systemd system 파일(`/ect/systemd/system/monitor.service`)

 

 

monitor.sh 가 서비스가 실행중인지 판단을 하고, 실행중이지 않으면 service.sh 스크립트를 실행시킨다.

 

 

 

1. 모니터링 스크립트 작성

`/service/script` 경로에 monitor.sh 파일을 만들었다.

SERVICES=("service.jar" "/service/script" "/service/logs/restart.log")

restart_process() {
  process_name=$1
  script_path=$2
  log_file=$3
  timestamp="$(date +"%Y-%m-%d %H:%M:%S")"

  echo "[${timestamp}] ${process_name^^}_MONITOR_RESTART" >> "${log_file}"

  cd "${script_path}" || exit
  ./service.sh

  sleep 10
}

check_and_restart() {
  process_name=$1
  script_path=$2
  log_file=$3
  process_cnt=$(ps -ef | grep "${process_name}" | grep -v 'grep' | awk '{print $2}' | wc -l)

  if [ "${process_cnt}" -eq 0 ]; then
    restart_process "${process_name}" "${script_path}" "${log_file}"
  fi
}

while :; do
  check_and_restart "${SERVICES[0]}" "${SERVICES[1]}" "${SERVICES[2]}"
  sleep ${CHECK_SEC}
done

 

 

 

`SERVICES=("service.jar" "/service/script" "/service/logs/restart.log")` 은 순서대로 서비스 프로세스, 서비스 스크립트 경로, 서비스 로그 파일이다.

 

서비스 프로세스는 서비스가 돌고있는지 확인하는 작업에서(`ps -ef`),

서비스 스크립트 경로는 서비스 스크립트의 위치를 찾기 위해,

서비스 로그 파일은 재시작한 날짜와 시간을 기록하기 위해 사용된다.

 

 

monitor.sh 파일 실행 권한도 수정해주면 된다.

chmod +x /service/script/monitor.sh

 

 

 

2. 모니터링 systemd 서비스 파일 생성

`/etc/systemd/system` 경로에 `monitor.service` 파일을 만든다.

[Unit]
Description=Process Monitor Service
After=network.target

[Service]
ExecStart=/service/script/monitor.sh
Restart=always
User=myuser
Group=mygroup

[Install]
WantedBy=multi-user.target

 

 

1번에서 만든 모니터링 스크립트가 systemd 서비스로 동작하면서,

 

서버가 내려갔다 올라가거나 재부팅이 되는 등의 문제가 생겨도 자동으로 모니터링을 해준다.

 

 

그러기 위해서는 systemd 서비스 등록 후, enable 설정도 같이 해준다.

 

sudo systemctl daemon-reload
sudo systemctl enable monitor.service

 

 

3. 테스트

모니터링 서비스가 잘 돌고있는지,

 

systemctl status monitor.service
sudo systemctl list-unit-files | grep monitor

 

 

서비스가 잘 동작중인지 확인한다.

 

ps -ef | grep service.jar

 

반응형

'Linux > 기타' 카테고리의 다른 글

^M 삭제  (0) 2025.02.07
[item2]IP 주소 하이라이트(IP 주소 글자색 바꾸기)  (1) 2024.01.09