[개발] 프로그램 정상동작 여부 확인하기

Words
189
Reading
1 min
Listen
Play
6y

개요

24/7 365 days ! 죽어도 죽지않는 프로그램을 개발하기 위한 긴 여정 ...

이전에 [공지] 주사위 서비스 등, 일일 점검 시간 추가됨
을 통해 자정에 무조건 재기동 했는데, 낮에 프로그램이 멈추면 답이 없음... 또 수동으로 작업 처리 해야 되는 것도 불편하여 그 문제를 개선

문제해결

블록 단위로 정상 처리가 되면 정상 처리가 된 시간을 기록 하며, 마지막 정상처리 시간과 현재 시간을 비교해 일정시간 (5분) 이상 차이가 나면 프로세스를 자동으로 KILL 하도록 함.

A가 비정상으로 동작중이면 B가 감지할 수 없어서 C를 추가함.

  • A : 실제 동작 프로그램
  • B : A 프로그램이 동작 안하면 재기동 시키는 프로그램
  • C : (신규) A 프로그램이 비정상 동작중이면 KILL 하는 프로그램

코딩

steem.block (json) 파일을 읽어 마지막 처리 수행 시간을 읽은 후 현재 시간과 비교 후 해당 차이가 일정시간(600초) 벌어지면 비정상 동작으로 간주하고 프로세스(steemdemon_bot) 을 KILL 한다.

  • jq : 터미널에서 json을 파싱할 수 있도록 도와주는 프로그램 ( 신규 설치)
READ_FILE='steem.block'
SEC_OVER_CHK=300
SEC_GAP=$((`date +"%s"` - `cat $READ_FILE | jq '.sec'`))
KILL_PROCESS_NAME='steemdemon_bot'

if [ $SEC_GAP -ge $SEC_OVER_CHK ]
then
    # 비정상 상태, 종료 후 필요 시 별도 추가 대기 시간을 더해준다
    echo "over $SEC_OVER_CHK sec : gap is $SEC_GAP"
    pgrep -f $KILL_PROCESS_NAME | awk '{print "kill -9 " $1}' | sh
    echo "process is killed"
    #sleep 60
else
    # 정상 상태 
    echo "under $SEC_OVER_CHK sec : gap is $SEC_GAP"
fi

맺음말

역시 상호점검이 중요한 것 같습니다. 내가 일을 하고 있는 것이 문제가 아니라 잘하고 있는지 가 중요한 것인데, 일단 스스로 판단하는 것도 중요하지만 관리자를 통해 일 잘 하는지 점검을 받는 것 또한 중요한 것이죠.

이런것 보면 우리 삶과 프로그램이 뭐 크게 다르지 않은 것 같네요 ~ 행복한 주말 보내세요~

[개발] 프로그램 정상동작 여부 확인하기 | Ecency