링크 ux 셸 프로 세 스 감시 스 크 립 트
用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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.