링크 ux 셸 프로 세 스 감시 스 크 립 트

3357 단어 linux기록 하 다.
用linux那么久,到现在算是能写出来一点实用的脚本。记录一下。

이 스 크 립 트 는 TARGET 이 가리 키 는 프로그램 을 감시 하 는 데 사 용 됩 니 다. 프로그램 이 실행 되 지 않 으 면 시작 스 크 립 트 run. sh 를 실행 합 니 다.또한 프로 세 스 의 cpu 사용률 이 예상 에 미 치지 못 하면 프로 세 스 를 죽 이 고 프로그램 을 다시 시작 할 수 있 습 니 다.기능 이 간단 하고 안정성 도 테스트 중 입 니 다. run. sh 에 서 는 "./TARGET"라 고 간단하게 쓸 수 있 습 니 다. TARGET 이 실행 할 프로그램의 이름 은 이 스 크 립 트 의 TARGET 과 같 아야 합 니 다. 여전히 이상 적 이지 않 습 니 다. 선배 님 의 지적 을 환영 합 니 다.
#!/bin/bash  
  
PROCESSID=0  
THERMALDIR="/sys/devices/virtual/thermal/thermal_zone"
DEVICE="temp"
TARGET="executable"  
RUNFILE="run.sh"  
ISEXIST=0  
CPUUSAGE=0  
TARGETCPUUSAGE=100  


cpuUsage()  
{  
    if [[ $PROCESSID -gt 999 ]]; then  
        usage=`top -b -n 1 -d 1 | grep $TARGET | awk '{print $9}'`  
        echo "large"  
    else  
        usage=`top -b -n 1 -d 1 | grep $TARGET | awk '{print $9}'`  
        echo "small"  
    fi  
    CPUUSAGE=`echo $usage | awk -F. '{print $1}'`  
}  
  
checkExist()  
{  
    server=$(ps -aux | grep $TARGET | grep -v grep | wc -l)  
    if [[ $server -eq 0 ]]; then  
        #echo "thread doesn't exist'" >> /tmp/program.log  
        ISEXIST=0  
    elif [[ $server -eq 1 ]]; then  
        #echo "thread exist" >> /tmp/program.log  
        ISEXIST=1  
    else  
        ISEXIST=2  
        echo "there are more than two process running" >> /tmp/program.log  
    fi  
}  
  
  
getPid()  
{  
    PROCESSID=`pidof $TARGET` #`ps -eo pid,comm | grep $TARGET | awk '{print $1}'`  
    echo "pid:$PROCESSID" >> /tmp/program.log  
}  
  
runCalmcar()  
{  
    if [ -e $TARGET -a -e $RUNFILE ]; then  
        ./run.sh 2>&1 >> /tmp/program.log &  
        echo "execute run.sh" >> /tmp/program.log  
    else  
        echo "there is no executable file exist" >> /tmp/program.log  
  
    fi  
}  


getThermal()
{
    TEMP=(0 0 0 0 0 0 0)
    for i in {0..7}; do
        TEMP[$i]=`cat $THERMALDIR$i/$DEVICE`
    done
    echo "$(date) BCPU:${TEMP[0]} MCPU:${TEMP[1]} GPU:${TEMP[2]} AO:${TEMP[3]} TBoard:${TEMP[4]} TDiode:${TEMP[5]} Fan:${TEMP[6]}" >> /tmp/temperature.log
}
  
while true; do  
    echo "system start at $(date)" >> /tmp/program.log  
  
    count=0  
    while true; do  
        checkExist  
        getThermal   
        if [[ $ISEXIST -eq 1 ]]; then  
            getPid  
            cpuUsage  
            echo "cpuUsage:$CPUUSAGE" >> /tmp/program.log  
            if [[ $CPUUSAGE -lt $TARGETCPUUSAGE ]]; then  
                (( count++ ))  
                echo "count:$count" >> /tmp/program.log  
                if [[ $count -gt 9 ]];then  
                    kill $PROCESSID  
                    count=0
                    echo "$TARGET was killed at $(date) with pid $PROCESSID" >> /tmp/program.log  
                    sleep 5
                fi  
		else
            count=0
            echo "process ID:$PROCESSID" >> /tmp/program.log  
            fi  
        elif [[ $ISEXIST -eq 0 ]] ;then 
            count=0
            runCalmcar  
        else
            echo ""
        fi  
        sleep 2  
    done  
  
done 

좋은 웹페이지 즐겨찾기