Linux - 리눅스 프로세스 감지 및 재시작 스크립트 | systemd & Crontab 활용

2024. 10. 18. 16:38·OS/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
반응형
저작자표시 (새창열림)

'OS > Linux' 카테고리의 다른 글

Linux - 사용자 정의 명령어 등록 및 버전 관리 방법 (PATH, 심볼릭 링크, update-alternatives 활용)  (7) 2024.11.01
Linux - SSL 인증서 만료 자동 체크 및 알림 스크립트 (이메일 발송 포함)  (0) 2024.11.01
Linux - 일반계정으로 1024이하 포트 사용방법 (setcap / getcap)  (3) 2024.10.03
Linux - 리눅스 jq 명령어 사용법 | JSON 데이터 필터링 및 파싱 방법  (0) 2024.10.03
Linux - /proc/[PID]/status 파일 정보  (4) 2024.10.02
'OS/Linux' 카테고리의 다른 글
  • Linux - 사용자 정의 명령어 등록 및 버전 관리 방법 (PATH, 심볼릭 링크, update-alternatives 활용)
  • Linux - SSL 인증서 만료 자동 체크 및 알림 스크립트 (이메일 발송 포함)
  • Linux - 일반계정으로 1024이하 포트 사용방법 (setcap / getcap)
  • Linux - 리눅스 jq 명령어 사용법 | JSON 데이터 필터링 및 파싱 방법
삼삼한소나무
삼삼한소나무
시스템 엔지니어의 실무 경험과 IT 이야기를 삼삼하게 정리하는 공간입니다.
  • 삼삼한소나무
    삼소의 삼삼한 메모장
    삼삼한소나무
    • 분류 전체보기 (150)
      • OS (85)
        • Linux (56)
        • Windows (16)
        • Network (13)
      • DB (20)
        • Oracle (2)
        • MSSQL (2)
        • Mysql(MariaDB) (16)
        • Other (0)
      • Server (14)
        • Web (8)
        • WAS (6)
      • DevOps (22)
      • IT 기술 팁 (5)
        • 메모 (2)
      • 일상 (4)
        • 재테크 (1)
  • 공지사항

    • 삼소의 삼삼한 메모장 안내
  • 인기 글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.6
삼삼한소나무
Linux - 리눅스 프로세스 감지 및 재시작 스크립트 | systemd & Crontab 활용
상단으로

티스토리툴바