読者です 読者をやめる 読者になる 読者になる

Hina-Mode

とある呑んだくれエンジニアの気が向いた時に書く戯言

【未熟】Linuxの実行中の負荷監視と終了時の負荷平均の自動計算を行なうshellScript

Linux

これもずいぶん前に必要に駆られたのでやっつけで作ってみたんですが、
監視を抜けるためにqをpressしたら終了、にしたら
ttyが変になってしまって終了後のcli入力が見れない(一応入力自体はできてる)事に。
というなんともポンコツなスクリプトなのですが、
どなたか何がイケないのか教えていただければすごく助かります。

一応監視内容はmpstatの数値を追っているだけです。
実行後、qキーを押すとスクリプト終了となり、
抜けた後にはawkで自動計算を走らせ、平均値を算出させます。

if [ -t 0 ]; then stty -echo -icanon time 0 min 0; fi
keypress=''
result=''
echo "time	load	%user	%nice	%sys	%iowait"
while :
do
	tl=`uptime | sed -e "s/ \([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\).\+load average:/\1/g" | sed -e "s/ \+/ /g" | cut -d" " -f1,2 | sed -e "s/,//g" | xargs echo -n`
	tl=$tl`echo -n " "`
	tl=$tl`mpstat 1 1 | grep Average | sed -e "s/ \+/ /g" | cut -d" " -f3,4,5,6`
	echo $tl | sed -e "s/ /\t/g" 
	result="$result\n$tl"
	read keypress
	if [ "$keypress" = "q" ]; then
		break
	fi
done

# calc average
echo "check finished."
echo -n "load average: "
echo -e $result | grep -v "time" | awk '{ sum += $2; num++}; END { print sum/num }'
echo -n "user cpu usage: "
echo -e $result | grep -v "time" | awk '{ sum += $3; num++}; END { print sum/num"%" }'
echo -n "iowait average: "
echo -e $result | grep -v "time" | awk '{ sum += $6; num++}; END { print sum/num"%" }'