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
반응형
'OS > Linux' 카테고리의 다른 글
Linux - 스크립트 명령어를 등록하고 버전 관리하는 법 (6) | 2024.11.01 |
---|---|
Linux - SSL 인증서 만료 체크 스크립트 (0) | 2024.11.01 |
Linux - 일반계정으로 1024이하 포트 사용방법 (setcap / getcap) (2) | 2024.10.03 |
Linux - jq 명령어란? (JSON 데이터 처리기) (0) | 2024.10.03 |
Linux - /proc/[PID]/status 파일 정보 (4) | 2024.10.02 |