#! /bin/bash
#每5s监听内存的使用情况,并将统计结果插入到mysql数据库
logPath="/export/home/itms/logs/log"
errPath="/export/home/itms/logs/err"
#定义func函数,将查询结果插入到mysql数据表中
func()
{
while true
do
Mem=free -m|sed -n '2p'|awk '{print ((($2-$6-$7)/$2))}'
date=`date +%s`
#因为IP是字符串类型,所以要加""将IP的字段转换为字符串格式,\是进行转义的意思
IP=\"`ifconfig|sed -n "2p"|awk '{print $2}'`\"
#-e //执行mysql的sql语句(增删改查以及建表等语句)
mysql -uroot -p123456 ITMS -e "insert into Mem values($date,$IP,$Mem);" 2>>$errPath 1>>$logPath
#当插入语句执行成功一次,就退出,此处主要测试while循环语句的用法
#[ $? -eq 0 ]&&break
sleep 5
done
}
#查看Mem数据表是否存在
mysql -uroot -p123456 ITMS -e "select * from Mem where gathertime='1'" 2>>$errPath 1>>$logPath
#如果数据表Mem不存在,需要新创建Mem数据表
if [ $? -ne 0 ];then
mysql -uroot -p123456 ITMS -e "create table Mem(
gathertime int(10) not null,
ip varchar(20) not null,
memvalue double(9,8) not null
);"
#如果数据表Mem创建失败,继续创建
if [ $? -ne 0 ];then
while true
do
mysql -uroot -p123456 ITMS -e "create table Mem(
gathertime int(10) not null,
ip varchar(20) not null,
memvalue double(9,8) not null
);"
#此处一定要有数据表Mem是否创建成功的判断,否则会一直在执行数据表的创建
#判断数据表Mem创建是否成功,成功的话,跳出循环语句
[ $? -eq 0 ]&&break
sleep 5
done
else
#如果创建成功,进行内存状态监控并入表
func;
fi
else
func;
fi