服务器上的网站比较多,mysql
、apache
经常不堪重负罢工
所以就抽了一上午学习了一些bash
的语法,参考了一些类似问题解决的博客,做了一个小程序,遇到负载过高、mysql
& apache
关停的时候会自动重新启动mysql
& apache
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #!/bin/sh
ipaddarr=`ifconfig|grep "inet addr:"|grep -v "127.0.0.1"|head -n 1|cut -d: -f2|awk '{print $1}'`
PortCheck=`netstat -ant | grep ${ipaddarr}:80|grep "TIME_WAIT" &>/dev/null` Port="$?" httpdCheck=`ps aux|grep httpd|grep -v grep &>/dev/null` PID="$?" if [ "$Port" -ne "0" -o "$PID" -ne 0 ];then http="err" fi
TOP_SYS_LOAD_NUM=10 SYS_LOAD_NUM=`uptime | awk '{print $(NF-1)}' |cut -d, -f1` isLoad=`awk -v num1=$TOP_SYS_LOAD_NUM -v num2=$SYS_LOAD_NUM 'BEGIN{print(num1>nu m2)?"1":"0"}'` if [ "$isLoad" -eq 0 ]; then load="over" fi
CMDCHECK=`lsof -i:3306 &>/dev/null` Port="$?" PIDCHECK=`ps aux|grep mysql|grep -v grep&>/dev/null` PID="$?" if [ "$Port" -ne "0" -o "$PID" -ne 0 ];then mysql="err" fi
if [[ $http == "err" ]]; then pkill httpd sleep 5 service httpd start echo "#Http err@" $(date +"%y-%m-%d %H:%M:%S") "restart httpd" fi if [[ $load == "over" ]]; then pkill httpd sleep 5 service httpd start echo "#Over load@" $(date +"%y-%m-%d %H:%M:%S") "restart httpd" fi if [[ $mysql == "err" ]]; then pkill mysqld sleep 5 service mysqld start echo "#Mysql err@" $(date +"%y-%m-%d %H:%M:%S") "restart mysql" fi
|
由于网页编码以及换行符不同,切勿直接复制使用,您可以 点击下载
或者
1
| wget http://www.jeay.net/download/check_http_mysql.sh
|
使用方法:
设置 TOP_SYS_LOAD_NUM=10
最大负载10
超过10
将重启
一些低版本的MYSQL
服务为mysqld
需要替换一下源码中mysql
crontab
-e
编辑crontab
最后一行加入如下(注意路径)
1
| */2 * * * * root /root/check_http_mysql.sh >>/root/check.log
|
↑每2
分钟运行一次 频率可以自行设置
crontab -l
可以查看计划任务
check.log
为日志文件,每次执行重启操作将会记录一次
如果还没有安装crontab
上面第三步的无法执行,需要安装:
1 2 3
| yum install vixie-cron crontabs chkconfig crond on service crond start
|