当前位置: 技术问答>linux和unix
请教一个监控MYSQL和服务器负载的脚本
来源: 互联网 发布时间:2016-12-04
本文导语: 我憋出来的代码如下,憋得很难受 #!/bin/bash MYSQL=/usr/local/mysql/bin/mysql MYSQL_HOST=localhost MYSQL_USER=root MYSQL_PASSWORD=123456 CPU_NUMBER=`cat /proc/cpuinfo |grep processor |wc -l` #获取CPU个数 CPU_LOAD=`echo $CPU_NUMBER*3.5|bc` ...
我憋出来的代码如下,憋得很难受
我的问题是:
1:#得到比较值 和 #用比较值和0进行比较应该是可以放一起的。可是我直接用if [ `expr $LOAD > $CPU_LOAD` ]
得到的总是FREE,也就是IF里面永远是1,这个这么弄?
2:取CPU个数和计算负载应该是可以更简单的处理
3:整个程序应该都可以有更优的写法,现在这个功能是实现了,可是这个变量又那个变量的,写出来对不起SHELL了。
哪个大哥帮我看看。
#!/bin/bash
MYSQL=/usr/local/mysql/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=123456
CPU_NUMBER=`cat /proc/cpuinfo |grep processor |wc -l` #获取CPU个数
CPU_LOAD=`echo $CPU_NUMBER*3.5|bc` #乘3.5当做最大负载数
#echo $CPU_LOAD
RESULT=`mysqladmin -u$MYSQL_USER -p$MYSQL_PASSWORD ping`#看看MYSQL是否还活着
if [ "$RESULT" = 'mysqld is alive' ] #如果活着
then
echo "mysqld is alive">>/tmp/keep.txt
LOAD_UPTIME=`uptime |awk '{print $8}'` #看下当前机器的负载
#echo $LOAD
#echo ${LOAD:0:4}
LOAD=`echo ${LOAD_UPTIME:0:4}|bc` #截取负载出来,去掉逗号
echo $LOAD
echo $CPU_LOAD
V=`expr $LOAD > $CPU_LOAD` #得到比较值
if [ $V=0 ] #用比较值和0进行比较
then
echo "FREE"
else
echo "BUSY"
fi
else
echo "mysqld is not alive"
#pkill keepalived
fi
我的问题是:
1:#得到比较值 和 #用比较值和0进行比较应该是可以放一起的。可是我直接用if [ `expr $LOAD > $CPU_LOAD` ]
得到的总是FREE,也就是IF里面永远是1,这个这么弄?
2:取CPU个数和计算负载应该是可以更简单的处理
3:整个程序应该都可以有更优的写法,现在这个功能是实现了,可是这个变量又那个变量的,写出来对不起SHELL了。
哪个大哥帮我看看。
|
基本上是cpu的核数*1吧,2核的超过2就开始慢了
|
额..其实一把情况也可以简单的pgrep mysql的,看下进程在不在
|
V=`expr $LOAD > $CPU_LOAD`
换成
if [ $LOAD -gt $CPU_LOAD ]
换成
if [ $LOAD -gt $CPU_LOAD ]
|
粗心了,没有细看.原来不是整数
|
if [ $V=0 ]
V是字符串的话应该是$V="0"吧
V是字符串的话应该是$V="0"吧