개요
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
맺음말
역시 상호점검이 중요한 것 같습니다. 내가 일을 하고 있는 것이 문제가 아니라 잘하고 있는지 가 중요한 것인데, 일단 스스로 판단하는 것도 중요하지만 관리자를 통해 일 잘 하는지 점검을 받는 것 또한 중요한 것이죠.
이런것 보면 우리 삶과 프로그램이 뭐 크게 다르지 않은 것 같네요 ~ 행복한 주말 보내세요~