본문 바로가기

OS/Linux

Linux - 프로세스 자동 재시작 설정 스크립트

728x90

서버에서 프로세스가 비정상적으로 동작하거나 중단되는 상황에 자동으로 재시작하는 방법이 필요했습니다.

systemd와 스크립트를 조합하여 서비스가 중단되었을 때 자동으로 재시작되도록 설정할 수 있습니다.


스크립트 구조

  • kill_my_service.sh: 특정 프로세스를 강제로 종료하는 역할을 합니다.
  • check_my_service.sh: 주기적으로 프로세스 상태를 점검하고, 필요시 프로세스를 재시작합니다.
    이 스크립트는 crontab을 이용해 매 분마다 실행됩니다.

kill_my_service.sh

#!/bin/bash

function killProcess()
{
    while :
    do
        if [ `ps -ef | grep $1 | grep -v grep | wc -l` -eq 0 ] ;
        then
            break
        else
            kill `ps -ef | grep $1 | grep -v grep | awk '{print $2}'`
        fi

        sleep 3

        if [ `ps -ef | grep $1 | grep -v grep | wc -l` -eq 0 ] ;
        then
            break
        else
            kill -9 `ps -ef | grep $1 | grep -v grep | awk '{print $2}'`
        fi
    done
}

killProcess my_service

exit 0

이 스크립트는 my_service라는 프로세스를 찾아 종료하는 역할을 합니다.

kill 명령어로 우선 종료를 시도하고, 실패 시 kill -9 명령을 통해 강제 종료합니다.

 

check_my_service.sh

#!/bin/bash

YYYYMM="`date +%Y%m`"

sleep 30

if [ `ps -ef | grep kill_my_service.sh | grep -v grep | wc -l` -gt 0 ] ;
then
    exit 0
fi

if [ `ps -ef | grep my_service | grep -v grep | wc -l` -eq 0 ] ;
then
    echo "[`date`] my_service down" >> /home/logs/check_my_service_${YYYYMM}.log

    export PATH=/usr/local/cuda-11.0/bin${PATH:+:${PATH}}
    export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64:/home/user/work/env/lib
# 서비스 구동 부분
    cd /home/user/work/app/;./my_service -i 0 >/dev/null 2>&1 &
fi

exit 0

이 스크립트는 my_service 프로세스가 실행 중인지 확인하고, 실행 중이지 않으면 로그를 남기고 재시작합니다.

crontab 설정

crontab -e 명령으로 check_my_service.sh을 주기적으로 실행하도록 추가합니다.

* * * * * /bin/bash /home/user/scripts/check_my_service.sh

 

728x90
반응형