* nix 기계 에서 어떤 프로 세 스 의 생사 를 검사 합 니 다.

회사 에 지주 와 싸 우 는 모 바 일 게임 프로젝트 가 있 습 니 다. 서버 는 제 가 썼 습 니 다. 그 로봇 은 어떤 bug 가 있어 서 실행 중 에 죽 을 수 있 습 니 다. 문 제 는 로 컬 테스트 때 죽지 않 았 습 니 다. 클 라 우 드 서버 에 올 려 놓 으 면 한 동안 실행 한 후에 소리 없 이 죽 습 니 다. 로 그 는 종 잡 을 수 없 는 오류 코드 만 있 습 니 다. (아니면 제 가 정의 한 오류 코드% > <%)
    이 짜증 나 는 bug 를 찾기 전에 빠 른 보완 조 치 를 취해 야 합 니 다.
    다음 질문 모드 로 전환:
    A: xxx, 이 두 지주 에 게 AI 가 없 나 요?
    B: 있어 요!로봇 이 이상 한 내 가 모 르 는 이유 로 늙어 죽 었 다 는 거 죠?
    A: 사장 님 한테 이 로봇 이 늙어 죽 었 다 고 말 하 라 고요?
    B: 내 프로그램 에 이렇게 심각 한 bug 가 있다 니!
    A: 그럼 어 쩌 라 고!!!
    B: 이거, 이거, 버그 찾기 힘 들 어...
    A: 로봇 이 죽 었 을 때 다시 시작 하면 안 돼 요?
    B: 빈랑 개!네 말 이 왜 이렇게 맞 아!
    A: 95% 의 일 을 끝 냈 다 는 걸 알 았 나 봐 요. 나머지 5% 는 코드 를 써 달라 고 했 어 요. 킁 킁!
    B: 네 가슴 에 있 는 빨 간 네커치프 가 더욱 선명 해 졌어!
위 와 같이 해결 방향 은 매우 간단 합 니 다. "프로 세 스 가 죽은 후에 프로 세 스 를 다시 시작 합 니 다."
그렇다면 내 가 직접적 으로 생각 할 수 있 는 것 은 감시 프로 세 스 이다. 감시 해 야 할 프로 세 스 가 살아 있 는 지 살 펴 보 는 것 이다.
아, 모든 것 이 정리 되 었 구나.
원리:
* nix 시스템 에 있 습 니 다. 실행 중인 프로 세 스 는/proc 에서 프로 세 스 번호 로 명 명 된 폴 더 를 생 성 합 니 다. 프로 세 스 가 닫 히 면 이 폴 더 는 존재 하지 않 습 니 다. 따라서 이 폴 더 의 존재 여 부 를 확인 하면 됩 니 다.
지혜 로 운 나 는 로봇 프로 세 스에 서 pid 를 가 져 와 서/var/run/의 어떤 파일 에 쓴다.
감시 하 는 과정 에서 일정 시간 마다 점검 해 보 자. 하하. 해결!상위 코드:
#!/bin/bash

robotpidf=/var/run/ddzrobot2.pid

checkrobot()
{
	#      pid  ,            /proc       ,         
	if !([ -f ${robotpidf} ] && [ -e /proc/$(cat ${robotpidf}) ]);then
		(python robot2.py &)
	else
		echo '  '
	fi
}


while [[ 1 ]]; do
	#               
	if [ $(ps -ef | grep 'python .* gate' | wc -l) -gt 1 ];then 
		checkrobot
	else
		echo '     '
		exit 0
	fi
	sleep 60
done

좋은 웹페이지 즐겨찾기