系统负载达到某值自动重启mysql脚本
记得以前VPS压力很大,每天某些时间段负载很高,而且会卡很久,有可能是某些程序/插件造成(网站多,服务器复杂),也很难排除,当然也很难舍弃当前的一些东西,根据我的观察有时候重启一下mysql一会就恢复,不重启mysql会持续很久,那么就想到一个想法,根据系统负载来重启mysqll服务,当然也可以重启任何服务,比如php等,自己修改!
今天记起来,收拾一下顺手记录一下,分享给大家:
系统:centos 5,其他系统均未测试!
#!/bin/sh
TOP_SYS_LOAD_NUM=20 #系统负载的值
SYS_LOAD_NUM=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`
echo $(date +"%y-%m-%d") `uptime`
if [ `echo "$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM"|bc` -eq 1 ]
then
echo "#0#" $(date +"%y-%m-%d %H:%M:%S") "pkill mysql" `ps -ef | grep mysql | wc -l`
/etc/init.d/mysql restart
sleep 60
for i in 1 2 3
do
if [ `pgrep mysql | wc -l` -le 0 ]
then
echo "#1#" $(date +"%y-%m-%d %H:%M:%S") "start mysql" `ps -ef | grep mysql | wc -l`
/etc/init.d/mysql start
sleep 30
fi
done
else
if [ `pgrep mysql | wc -l` -le 0 ]
then
echo "#2#" $(date +"%y-%m-%d %H:%M:%S") "start mysql" `ps -ef | grep mysql | wc -l`
/etc/init.d/mysql start
sleep 30
fi
fi
下面就是加入系统计划任务了:
crontab -e
#下面两个任选,或者自己定义,一般是在某段时间5分钟左右执行一次比较合适,也解决了我很多烦恼!
*/1 * * * * /root/kmysql.sh >>/root/kmysql.log #每分钟都执行,全部时间
*/2 13-14 * * * /root/kmysql.sh >>/root/kmysql.log #没两分钟执行一次,仅限于13点到14点
因为nginx+php-fpm,可能php-fpm挂掉了引起502或者php-fpm进程不够引起的502,那么这里可以稍微修改一下重启php-fpm!
记录php-cgi进程数
netstat -anpo | grep "php-cgi" | wc -l
重启php命令,根据自己实际情况处理
/usr/local/php/sbin/php-fpm restart
脚本执行如果报错
bc: command not found
表示没有bc命令,centos可以用 yum -y install bc 安装它.
好了,不多说了,灵活用吧!
太有才了!