好像是因为我监控的是Apache服务器的进程,而进程没有结束的时候是不能生成LOGFILE的。
脚本里哪里可以更改一下呢?我想修改一下,实现以下功能:
1. 第二个脚本用来自动激发第一个脚本,每隔2秒激发一次。
2. 每次激发第一个脚本时候,不管监控的httpd进程是否结束,都写入LOG FILE,每次激发写入一次。
请问怎么修改脚本好呢?
第一个脚本(监控):
代码: 全选
#!/bin/sh
#G.sh 20100813
USAGE="Usage: $0 processName"
if [ $# -ne 1 ]; then
echo $USAGE
exit 1
fi
# In case the monitored process has not yet started
# keep searching until its PID is found
PROCESS_PID=""
while :
do
PROCESS_PID=`/bin/pidof $1`
if [ "$PROCESS_PID.X" != ".X" ]; then
break
fi
done
LOG_FILE="memusage.csv"
echo "ElapsedTime,VmSize,VmRSS" > $LOG_FILE
ELAPSED_TIME=`date +%H:%M:%S:%N`
PERIOD=2 # seconds
while :
do
if [ -d /proc/$PROCESS_PID ] ; then
VM_SIZE=`awk '/VmSize/ {print $2}' < /proc/$PROCESS_PID/status`
if [ "$VM_SIZE.X" = ".X" ]; then
continue
fi
VM_RSS=`awk '/VmRSS/ {print $2}' < /proc/$PROCESS_PID/status`
if [ "$VM_RSS.X" = ".X" ]; then
continue
fi
echo "$ELAPSED_TIME,$VM_SIZE,$VM_RSS" >> $LOG_FILE
sleep $PERIOD
VM_SIZE=""
VM_RSS=""
ELAPSED_TIME=`date +%H:%M:%S:%N`
else
echo "$1 is no longer a running process"
exit 0
fi
done
第二个脚本(自动激发):
代码: 全选
#!/bin/sh
#
#GetMemUsage launch script
cmd=$1
if [ -n $cmd ] ; then
./G httpd $cmd &
$cmd
wait
fi
if ps x | perl -ne 'print if /\b'$cmd'\b/' > /dev/null 2>&1 ; then
wait
else
exit 0
fi