검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 쉘 스크립트
모니터링에 유용'할지도 모르는' 쉘 스크립트 2개를 소개합니다. 하나는 제가 만들었고 나머지 하나는 어디선가 납치했습니다.


1. 일정 시간마다 특정 이름의 프로세스들 중 CPU 점유율이 지정한 수치 이상인 프로세스 킬

  예를 들어 '매 60초마다 아파치(httpd) 프로세스 중 CPU 점유율이 40% 이상인 프로세스'를 찾아 죽이는 일을 할 수 있습니다. 약간 허접하게 만들어서 처음 검사할 때 걸려나온 프로세스들을 죽이지 않고 죽이기 직전에 다시 검사해서 나온 놈들을 죽입니다. 딱히 처음 나온 프로세스들의 PID를 변수에 저장해서 죽일 정도로 정교하게 처리할 필요가 없어 보여서 대충 그렇게 만들었습니다는 훼이크고 능력 부족으로;; 제거 대상을 파일로 리다이렉션해서 이리저리 처리할 수는 있을 거 같긴 한데 그렇게까지 할 필요는 없을 거 같습니다. 또 검사해서 괜찮으면 안 죽이면 그만이죠 뭐.
#!/bin/sh

KillingInterval=60
ThresholdToKill=40
KillingTarget=httpd

clear
while :
do
TargetCount=`ps -ef | grep -v grep | grep $KillingTarget | awk '$4>='$ThresholdToKill | wc -l`
date
if [ $TargetCount -gt 0 ]
then
echo "***점유율 $ThresholdToKill % 이상 프로세스 발생. 아래 프로세스에 대하여 제거 실시***"
ps -ef | grep -v grep | grep $KillingTarget | awk '$4>='$ThresholdToKill
ps -ef | grep -v grep | grep $KillingTarget | awk '$4>='$ThresholdToKill | awk '{print $2}' | xargs kill -9
else
echo "점유율 $ThresholdToKill % 이상 프로세스 없음"
fi
echo
sleep $KillingInterval
done


2. 특정 이름을 가진 프로세스의 개수와 지난 1분간 프로세스 큐 부하율의 평균 값 모니터링

  특정 이름을 가진 프로세스들의 개수가 지정한 수보다 적게 존재하는지와 uptime이나 top에서 확인이 가능한 지난 1분간 프로세스 큐 부하율의 평균 값이 지정한 값보다 높은지를 모니터링하는 스크립트입니다.

  AIX를 기준으로 만들어졌으며 시스템의 로케일에 따라 awk의 칼럼 값을 수정해야 할 수도 있습니다. 또한 OS에 따라 banner 명령어 부분을 수정해야 할 수도 있으며, echo에서 이스케이프(\c, \007)가 안 먹힐 경우에도 수정이 필요합니다.
#!/bin/sh

TargetProcess=httpd
ThresholdLoad=20
MinimumNumber=60
CheckInterval=5
ProcessNumber=`ps -ef | grep $TargetProcess | grep -v grep | wc -l`
LoadFloat=`uptime |sed s/hrs,//| sed s/mins,// | awk '{print $10}' | cut -f1 -d,`
LoadInteger=`echo $LoadFloat | cut -f1 -d.`

while :
do
echo "\n`hostname` : \c"
date
banner `echo ${ProcessNumber}/${MinimumNumber}-${LoadFloat}`

if [ $LoadInteger -ge $ThresholdLoad -o $ProcessNumber -lt $MinimumNumber ]
then
echo "  *** Check the process or system load *** \007 \c "
else
echo "  OK ------------------------------------------------ \c"
fi

sleep $CheckInterval
done
2011/01/30 17:25 2011/01/30 17:25