控制脚本,
stat.sh
PID_NUM=$$
PID_FILE=stat.pid
#echo "pid : "$PID_NUM
PROG_NAME=$0
ACTION=$1
usage() {
echo "Usage: ${PROG_NAME} {start|stop|restart}"
exit 1;
}
start(){
sh ./stat_run.sh &
PID_NUM=$!
echo "worker pid is " $PID_NUM
echo ${PID_NUM} > ${PID_FILE}
}
stop(){
PID_NUM=`cat ${PID_FILE}`
if [ "" != "${PID_NUM}" ]; then
echo kill pid is "${PID_NUM}"
kill ${PID_NUM}
fi
}
case "${ACTION}" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
*)
usage
;;
esac
其中$$ 表示当前正在运行的进程的pid,$!表示最近的上一个进程pid
真正运行统计程序的脚本
cat stat_run.sh
STAT_FILE=stat_delay.log
echo "" > $STAT_FILE
while true; do
tail -n10000 perf.log | awk '{print $8}' | grep totalAll | awk -F, 'BEGIN {cnt=0;total=0} {cnt=cnt+1;total=total+$3} END{print '"\"$(date +%Y-%m-%d-%H:%M:%S)\""', total/cnt}' >> $STAT_FILE;
sleep 5;
done;
上面脚本,每5秒统计最新生成的10000条记录的平均值
在awk中每行打印当前时间
[admin@v021130.sqa.cm4 logs]$ cat test.log
2013-07-30-23:00:12 44.5791
2013-07-30-23:00:17 44.5791
2013-07-30-23:00:22 44.5791
2013-07-30-23:00:27 44.5791
2013-07-30-23:00:32 44.5791
2013-07-30-23:00:37 44.5791
2013-07-30-23:00:42 44.5791
2013-07-30-23:00:47 44.5791
2013-07-30-23:00:52 44.5791
2013-07-30-23:00:58 44.5791
[admin@v021130.sqa.cm4 logs]$ awk '{print '"\"$(date +%Y-%m-%d-%H:%M:%S)\""', $1}' test.log
2013-07-30-23:01:21 2013-07-30-23:00:12
2013-07-30-23:01:21 2013-07-30-23:00:17
2013-07-30-23:01:21 2013-07-30-23:00:22
2013-07-30-23:01:21 2013-07-30-23:00:27
2013-07-30-23:01:21 2013-07-30-23:00:32
2013-07-30-23:01:21 2013-07-30-23:00:37
2013-07-30-23:01:21 2013-07-30-23:00:42
2013-07-30-23:01:21 2013-07-30-23:00:47
2013-07-30-23:01:21 2013-07-30-23:00:52
2013-07-30-23:01:21 2013-07-30-23:00:58
[admin@v021130.sqa.cm4 logs]$ awk '{print '"\"$(date +%Y-%m-%d-%H:%M:%S)\""', $2}' test.log
2013-07-30-23:01:27 44.5791
2013-07-30-23:01:27 44.5791
2013-07-30-23:01:27 44.5791
2013-07-30-23:01:27 44.5791
2013-07-30-23:01:27 44.5791
2013-07-30-23:01:27 44.5791
2013-07-30-23:01:27 44.5791
2013-07-30-23:01:27 44.5791
2013-07-30-23:01:27 44.5791
2013-07-30-23:01:27 44.5791