yolo기반 시스템에서 네트워크 장애 혹은 디바이스 에러(GPU, Camera)가 발생한 경우를 대비하는 것이 중요하다.
Exception에 대한 에러 처리는 다음과 같이 간단하게 진행된다.
타겟 PID모니터링(1sec) - 에러발생 - RestAPI전송(알림) - 재실행
처음에는 에러 발생하는 코드 부분에 if False == Do something 방식으로 exception을 다루려고 했으나 그러기에는 어느부분에서 에러가 튀어나올지 모르기 때문에 그냥 커멘드 창에서 yolo가 죽어버리면 다시 실행해주는 시스템을 만들기로 했다.
우선 yolov4 기준으로 설명하겠다. 아래 폴더디렉토리를 기준으로
1) 아래 링크에서 autorun 폴더를 받고 yolov4 루트 디렉토리에 위치시킨다.
https://www.mediafire.com/folder/uo1d0cfwcuibf/autorun
3) VAS_start.sh 파일은 yolov4를 구동시키는 코드이다.
4) VAS_status.sh 파일은 VAS_start.sh가 현재 동작하고 있는지를 감지하는 시스템이고, 만약 동작하지 않으면 재실행 해주는 bash script라고 이해하면 된다.
코드를 각각 살펴보자.
VAS_start.sh
바꿀부분
cd /home/dpw/Python/envs <<이부분은 파이썬 가상환경 폴더
source test/bin/activate <<이부분은 파이썬 가상환경 실행
python /home/dpw/codes/Westports/westport_VAS/src/main.py <<이부분은 YOLOV4 RUN COMMAND로 바꿔주면됨.
#! /bin/bash
### YOLOV4 AUTORUN!
echo "가상환경폴더로 갑시당~"
cd /home/dpw/Python/envs
echo "test라는 가상환경을 activation해줍니다~"
source test/bin/activate
echo "YOLOV4를 구동해줍니다."
python /home/dpw/codes/Westports/westport_VAS/src/main.py
echo "구동이 완료되었습니다."
exit 0
VAS_status.sh
바꿀부분
Log= 디렉토리 경로 수정
NORMAL_SLEEP= x(초)
PROB_SLEEP= x(초)
Cnt=`ps -ex|grep VAS_start|grep -v grep|wc -l`
/home/dpw/codes/Westports/westport_VAS/autorun/VAS_start.sh &
#!/bin/sh
#: Title : Check VAS status script
#: Date : 2021-11-12
#: Author : "Min Kim" <Min.Kim@dpworld.com>
#: Version : 1.0
#: Description : Checking current running VAS and re-start VAS_start.sh script when it dead.
#: : Please refer to monitor.out logfile.
#: : LogfileDir = /home/dpw/codes/Westports/westport_VAS/autorun/log/monitor.out
#!/bin/bash
Log=/home/dpw/codes/Westports/westport_VAS/autorun/log/monitor.out
DATE=`date +%Y%m%d-%H%M%S`
NORMAL_SLEEP=1 #정상시 대기 시간
PROB_SLEEP=1 #장애발생시 대기 시간(장애시 곧바로 시작하기 위해)
#Log File Rename
mv -f "$Log" "${Log}_`date +%Y-%m-%d-%H%M`"
echo "#####################################"
echo "$DATE VAS WESTPORT Monitoring Start!"
echo "#####################################"
echo "#####################################" >> $Log
echo "$DATE VAS WESTPORT Monitoring Start!" >> $Log
echo "#####################################" >> $Log
while [ 1 ]
do
DATE=`date +%Y%m%d-%H%M%S`
Cnt=`ps -ex|grep VAS_start|grep -v grep|wc -l`
if [ $Cnt \< 1 ]
then
PROCESS=`ps -ex|grep VAS_start|grep -v grep|awk '{print $1}'`
if [ "$PROCESS" != "" ]
then
echo "$DATE : 프로세스를 종료합니다."
echo "$DATE : 프로세스를 종료합니다." >> $Log
kill -9 $PROCESS
wait
fi
echo "$DATE : westport_VAS를 재 기동합니다."
echo "$DATE : westport_VAS를 재 기동합니다." >> $Log
# 여기서 서버를 재기동한다.
/home/dpw/codes/Westports/westport_VAS/autorun/VAS_start.sh &
echo "$DATE : westport_VAS를 재 기동 완료."
echo "$DATE : westport_VAS를 재 기동 완료." >> $Log
sleep $PROB_SLEEP
continue
else
echo "$DATE : 정상 작동중 입니다."
echo "$DATE : 정상 작동중 입니다." >> $Log
fi
sleep $NORMAL_SLEEP
done
위 코드는 로그를 출력도 하고 저장도 하기위해서 불필요하게 >>Log 부분이 중복되어있으니 원하면 삭제해도된다.
'VAS > Centos 7 개발환경 구축' 카테고리의 다른 글
CentOS7, 우분투 D2Coding, D2Coding ligature font 폰트 한방에 설치, vscode에 적용방법까지 (433) | 2022.01.21 |
---|---|
Centos 7 video codec pack install - smplayer (0) | 2021.11.22 |
YoloV4 CentOS7 개발환경 설치 정보 정리 메뉴얼 (1) | 2021.11.04 |
CentOS 7 Linux Unable to access "SSD" 외장하드 연결 문제 해결 (0) | 2021.11.03 |
Face Recognition 제작기 -3단계 비디오 인식 (0) | 2021.10.13 |
댓글