记得以前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 安装它.

好了,不多说了,灵活用吧!