간단 하면 서도 실 용적 인 강 라 스 크 립 트.

6762 단어
머리말:
      스 크 립 트 를 강하 게 당기 면 많은 사람들 이 간단 하 다 고 생각 할 수도 있 습 니 다. 현재 프로 세 스 가 있 는 지 없 는 지 감시 하고 없 으 면 끌 어 올 립 니 다. 세 마디 셸 로 해결 합 니 다.
네, 대체로 이렇게 간단 합 니 다.여기 소 개 된 강 라 모니터링 스 크 립 트 는 위 에 있 는 것 보다 조금 복잡 합 니 다.
배경:
      회사 의 한 업 무 를 다시 하고 여러 해 동안 쌓 았 습 니 다. 여러 사람 이 번갈아 유지 한 로그 작업 은 인수 인계 해 야 합 니 다. 많은 기계 들 이 퇴역 기 에 이 르 러 지연 되 고 프로 세 스 가 끊 어 지지 않 습 니 다. 디스크 가 가득 차 서 서 비 스 를 사용 할 수 없습니다. 각종 문제 가 계속 발생 합 니 다. 이런 문 제 를 처리 하 는 데 너무 많은 정력 을 들 였 습 니 다. 최적화, 재 구성 은 무엇 입 니까? 그래서 가능 한 한 번 거 로 운 운영 업 무 를 hold 해 야 합 니 다.단기간 에 익숙해 지기 어 려 운 상황 에서 스 크 립 트 를 억지로 끌 어 당 기 는 것 은 효과 적 인 선택 이 라 고 할 수 있다.
필요:
      프로 세 스 를 감시 하고 존재 하지 않 으 면 시작 합 니 다. 지연 되면 다시 시작 한 후에 도 프로 세 스 를 끌 수 있 습 니 다.
분석:
      다운 복구 에는 반드시 crontab 를 사용 합 니 다. 모니터링 은 프로 세 스 순환 에 상주 하거나 정시 에 시작 되 어도 crontab 를 떠 날 수 없습니다.
사용:
      스 크 립 트 하나, 함수 두 개, 인자 두 개 를 어떻게 실행 합 니까?
      crontab 추가: * * */data 2/slog/bin/deamoncrontab.sh checkScript=/data2/slog/bin/check_proxy_stat.sh failCheckAction=/data2/slog/bin/restart_proxy_stat.sh rtx=peterguo
 
매개 변수
checkScript: 스 크 립 트 를 검사 하고 0 을 종료 하면 검사 에 성 공 했 음 을 표시 합 니 다. 그렇지 않 으 면 실패 하고 실패 하면 failCheckAction 에서 보 여 준 스 크 립 트 를 실행 합 니 다.
failCheckAction: 실패 후 동작 스 크 립 트, 실행 성공 시
rtx: 경고 수신 자 이름 (자성 수정 핸드폰 인지 rtx 인지)
 
비고:
매개 변수 에 있 는 스 크 립 트 는 절대 경 로 를 사용 해 야 합 니 다. 그렇지 않 으 면 결 과 는 자부 합 니 다. (예 를 들 어 rm * 를 사 용 했 습 니 다)
매개 변수 에 있 는 스 크 립 트 는 '성공 exit 0, 그렇지 않 으 면 0 이 아 닙 니 다' 의 원칙 에 부합 되 어야 합 니 다. 그렇지 않 으 면 신고 가 많아 지면 책임 을 지지 않 습 니 다.
 
체험 1: (로 그 는 모니터링 스 크 립 트 와 같은 디 렉 터 리 에 생 성 됩 니 다. 이름 은:
deamon_crontab.run.log)
스 크 립 트 검사 성공, 바로 종료
./deamon_crontab. sh checkScript =/bin/date failCheckAction =/bin/date rtx = 당신 의 rtx
발걸음 을 검사 하 는 데 실 패 했 습 니 다. 후속 동작 을 성공 적 으로 수행 하 였 습 니 다.
./deamon_crontab.sh checkScript=/proc/meminfo failCheckAction=/bin/date rtx = 너의 rtx
발걸음 을 검사 하 는 데 실 패 했 습 니 다. 후속 동작 을 수행 하 는 데 실 패 했 습 니 다. rtx 알림
./deamon_crontab. sh checkScript =/proc/meminfo failCheckAction =/proc/meminfo rtx = 당신 의 rtx
 
  위의 스 크 립 트:
#! /bin/bash    
  
#####################################################   
#name           : deamon_crontab.sh   
#note           : to deamon some process and execuate some action   
#date           : 2013.01.10   
#author         : <[email protected]>   
####################################################   
  
CurFullScript=$(readlink /proc/$$/fd/255)   
CurScriptPath=$(dirname $CurFullScript)   
CurScriptName=$(basename $CurFullScript)   
FullParam=$*   
CurPid=$$   
IPS=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2}' | cut -c 6- | awk '{printf("%s ", $0)}')   
CurRunLog=$(dirname $CurFullScript)/$(echo $CurScriptName | cut -d . -f1).run.log   
  
AnotherProcessNum=$(ps -ef | grep $CurScriptName | grep -v $CurPid | grep -v grep | wc -l)   
if [ $AnotherProcessNum -ne 0 ];   
then       
 echo "Another process is running, exit "       
 exit 1   
fi   
  
#If exist, import some basic shell function, here colorEcho   
source ~/bin/basicfunction.sh 2>/dev/null   
if [ $? -eq 1 ];   
then   
    function colorEcho(){   
 colorFmtTail='\033[m'  
 greenFmtHead='\033[1;32m'  
 echo -e ${greenFmtHead}${2}${colorFmtTail}   
 }   
fi   
  
function usage(){   
 colorEcho red "Usage : /path/$(basename $0) checkScript=/data/check.sh failCheckAction=/data/restart.sh rtx=rtxguo"  
    colorEcho red "Note  : 1.checkScript[0-succ other-fail] 2.failCheckAction[execuat onlyif checkScript fail] 3.assert script full path from / and exist"  
    echo ""  
    exit 1   
}   
  
#Reslove the param, format name=value -> $name and check parameter validation   
echo $* | grep checkScript | grep failCheckAction 2>/dev/null   
[[ $? -ne 0 ]] && {   
usage   
}   
  
eval "valTmp=Temp $*" 2>/dev/null   
paramValid=$?   
  
[[ "x" == "x$checkScript" ]] && {   
paramValid=$(( $paramValid + 1 ))   
}   
echo ${checkScript}x | grep ^/ >/dev/null 2>&1   
paramValid=$(( $paramValid + $? ))   
ls ${checkScript} >/dev/null 2>&1   
paramValid=$(( $paramValid + $? ))   
  
[[ "x" == "x$failCheckAction" ]] && {   
paramValid=$(( $paramValid + 1 ))   
}   
echo ${failCheckAction}x | grep ^/ >/dev/null 2>&1   
paramValid=$(( $paramValid + $? ))   
ls ${failCheckAction} >/dev/null 2>&1   
paramValid=$(( $paramValid + $? ))   
  
if [ $# -ne 3 ] || [ $paramValid -ne 0 ];   
then   
 usage   
fi   
chmod +x $checkScript $failCheckAction 2>/dev/null   
  
#Enter Execuate path   
cd $CurScriptPath  
  
#Display the Current Environment Values   
echo "[$CurPid][$CurScriptPath][$CurScriptName][$FullParam]"  
  
function runScript(){   
strCommand=$1  
$strCommand  
return $?   
}   
  
colorEcho green "------------------------------check output begin -------------------------------------"  
runScript $checkScript  
checkRet=$?   
colorEcho green "------------------------------check output end ---------------------------------------"  
  
if [ $checkRet -eq 0 ];   
then   
    colorEcho green "$(basename $0):$LINENO Check PASS [$(date +"%Y-%m-%d %H:%M:%S")]"    
    colorEcho green "$(basename $0):$LINENO Check PASS [$(date +"%Y-%m-%d %H:%M:%S")]" >> $CurRunLog  
else  
 colorEcho red "$(basename $0):$LINENO Check FAIL [$(date +"%Y-%m-%d %H:%M:%S")]"  
 colorEcho red "$(basename $0):$LINENO Check FAIL [$(date +"%Y-%m-%d %H:%M:%S")]" >> $CurRunLog  
 colorEcho green "------------------------------failaction output begin -------------------------------------"  
    
 #execuate action script   
    runScript $failCheckAction     
 actionRet=$?   
 colorEcho green "------------------------------failaction output end ---------------------------------------"  
    
 [[ $actionRet -ne 0 ]] && {   
     colorEcho red "ERROR: Check Fail and Action Fail"  
        /usr/bin/env sendrtx peterguo $rtx ERROR "[deamon-monitor-error][$IPS:$CurFullScript:$LINENO][@peterguo]" 0   
  exit 1   
  colorEcho red "$(basename $0):$LINENO Action FAIL [$(date +"%Y-%m-%d %H:%M:%S")]"    
  colorEcho red "$(basename $0):$LINENO Action FAIL [$(date +"%Y-%m-%d %H:%M:%S")]" >> $CurRunLog  
 }   
 colorEcho red "$(basename $0):$LINENO Action PASS [$(date +"%Y-%m-%d %H:%M:%S")]"    
 colorEcho red "$(basename $0):$LINENO Action PASS [$(date +"%Y-%m-%d %H:%M:%S")]" >> $CurRunLog  
fi

좋은 웹페이지 즐겨찾기