- 论坛徽章:
- 0
|
原帖由 xlife 于 2007-11-1 15:02 发表 ![]()
我是bash,我写个简单脚本,把vmstat的结果保存到文件中,其中有句vm=`vmstat 1 2`,然后 echo $vm >> $file,但我打开$file发现vmstat的结果,本该四行的确没有分行,全部堆在一行,这是为什么,我该如何让他换 ...
#!/bin/bash
#author YiBin.Shen
#platform: CentOS
#you should install sysstat-XXXX.rpm to enable iostat,sar tools
#and sendmail service must have been installed
#Global variable
ADMIN=yibin.shen@infowarelab.com
IP=`ifconfig eth0 | awk '/inet addr/ {print $2}' | sed 's/.*:\(.*\)/\1/'`
INT=60
# if need ,use email function to send mail
email()
{
N=`ps aux | grep "sendmail" | grep -v \grep | wc -l`
if [ "$N" -eq 0 ] ; then
service sendmail start
wait
else
if [ "$2" = vmstat ] ; then
vmstat 5 2 | sed -n '3!p' | \
awk '{print ;print "\n"}' | mail -s ${IP} -v $1
elif [ "$2" = iostat ] ; then
iostat 5 2 | sed -n '18,19p' | \
sed '$!N;s/\n/&&/' | mail -s ${IP} -v $1
elif [ "$2" = uptime ] ; then
echo -e `date` "\n" `uptime` | \
mail -s ${IP} -v $1
elif [ "$2" = free ] ; then
free -m |mail -s ${IP} -v $1
fi
fi
}
#if need,write log to local file
write_log()
{
if [ "$1" = vmstat ] ; then
vmstat 5 2 | sed -n '3!p' | \
awk '{print ;print "\n"}' >> /var/log/monitor.log.`date +%m%d`
elif [ "$1" = iostat ] ; then
iostat 5 2 | sed -n '18,19p' | \
sed '$!N;s/\n/&&/' >> /var/log/monitor.log.`date +%m%d`
elif [ "$1" = uptime ] ; then
echo -e `date` "\n" `uptime` | \
>> /var/log/monitor.log.`date +%m%d`
elif [ "$1" = free ] ; then
free -m >> /var/log/monitor.log.`date +%m%d`
fi
}
#main loop
while : ;
do
#uptime:if avarage load is greater than 20,send a mail to admin.
LOAD=$(echo $(uptime) | awk -F':' '{if ( $5 ~ /\.[0-9]+/ ) print $5 ; \
else print $4}' | sed 's/ *//g'| awk -F. '{print $1}')
if [ "$LOAD" -gt 20 ] ; then
# email ${ADMIN} "uptime"
write_log "uptime"
fi
#CPU_idle:use SAR or VMSTAT command to monitor idle cpu,
# if cpu_idle is less than 10%,send a mail to admin,
#CPU_IDLE=`sar -u | awk '/Average/ {print $NF}' | sed 's/\(.*\)\.../\1/'`
CPU_IDLE=`vmstat 5 2 | sed -n '4p' | awk '{print $15}'`
if [ "$CPU_IDLE" -lt 80 ] ; then
# email ${ADMIN} "vmstat"
write_log "vmstat"
fi
#I/O: use iostat command to monitor disk's I/O
#if write speed is greater than 80000k/sec,
#or reader speed is greater than 60000k/sed,
#send a mail to admin
IO_STATE=`iostat 5 2| sed -n '/^Device/N;s/\n//p' | sed -n '2p'`
IO_W=`echo ${IO_STATE} | awk '{print $9}' | sed 's/\(.*\)\..*/\1/'`
IO_R=`echo ${IO_STATE} | awk '{print $8}' | sed 's/\(.*\)\..*/\1/'`
if [ "$IO_W" -gt 80000 ] ; then
# email ${ADMIN} "iostat"
write_log "iostat"
fi
#mem:use free command to monitor system's memory
#
SWAP_TOTAL=`free -m | awk '/Swap/ {print $2}'`
SWAP_USED=`free -m | awk '/Swap/ {print $3}'`
RATE=`echo "${SWAP_USED}*100/${SWAP_TOTAL}" | bc`
if [ "$RATE" -gt 85 ] ; then
# email ${ADMIN} "free"
write_log "free"
fi
sleep ${INT}
done
#script finished |
哈哈,我刚也在想这个问题呢,
我刚写的一个监控系统资源的脚本,写的比较烂,
将就着看下吧
[ 本帖最后由 BLZer 于 2007-11-1 15:20 编辑 ] |
|