간단 하면 서도 실 용적 인 강 라 스 크 립 트.
스 크 립 트 를 강하 게 당기 면 많은 사람들 이 간단 하 다 고 생각 할 수도 있 습 니 다. 현재 프로 세 스 가 있 는 지 없 는 지 감시 하고 없 으 면 끌 어 올 립 니 다. 세 마디 셸 로 해결 합 니 다.
네, 대체로 이렇게 간단 합 니 다.여기 소 개 된 강 라 모니터링 스 크 립 트 는 위 에 있 는 것 보다 조금 복잡 합 니 다.
배경:
회사 의 한 업 무 를 다시 하고 여러 해 동안 쌓 았 습 니 다. 여러 사람 이 번갈아 유지 한 로그 작업 은 인수 인계 해 야 합 니 다. 많은 기계 들 이 퇴역 기 에 이 르 러 지연 되 고 프로 세 스 가 끊 어 지지 않 습 니 다. 디스크 가 가득 차 서 서 비 스 를 사용 할 수 없습니다. 각종 문제 가 계속 발생 합 니 다. 이런 문 제 를 처리 하 는 데 너무 많은 정력 을 들 였 습 니 다. 최적화, 재 구성 은 무엇 입 니까? 그래서 가능 한 한 번 거 로 운 운영 업 무 를 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.