负载高,自动重启mysql,apache
服务器总是负载高,死机。从网上找了一篇,自动重启的,但是不符合wdcp的环境路径,哪位懂得同学,给改改,复合lnamp的环境,自动重启MySQL就行,最好休眠几十秒。========================================================================[p=23, 2, left]在网上查了不少资料,弄了个脚本来监控服务器负载,超负荷 就自动重启apache,mysql的脚本,[/p][p=23, 2, left]适用于centos系统,和自带apache 和mysql,自定义编译安装的可能需要稍作调整。[/p][p=23, 2, left]linux时间也是个问题,此脚本也添加了连接时间服务器同步校对时间。[/p][p=23, 2, left]/usr/sbin/ntpdate cn.pool.ntp.org >> /backup/gaige/upClock.log 2>&1 && /sbin/hwclock -w[/p][p=23, 2, left]现在分享给大家:[/p][p=23, 2, left]需要用的朋友,可以在你的终端,运行一下代码,就会自动装到你的服务器。
wget http://www.xiangguoqi.com/cmd/restart_apa_my_by_load.sh; sh restart_apa_my_by_load.sh[/p][p=23, 2, left] 装好后自动脚本和运行日志会在您服务器 /backup/gaige/ 下边,你可以自行调整。[/p][p=23, 2, left]默认自动是3分钟,你可以自行 crontab -e 修改[/p][p=23, 2, left]*/3 * * * * /backup/gaige/loadavg_restart_apache.sh >> /backup/gaige/restart_apache.log[/p][p=23, 2, left]-------------------[/p][p=23, 2, left]手动安装脚本如下:[/p][p=23, 2, left]把以下代码为sh脚本[/p][p=23, 2, left][color=#ff0000]#!/bin/sh
# crontab: */3 * * * * /backup/gaige/loadavg_restart_apache.sh >> /backup/gaige/restart_apache.log
/usr/sbin/ntpdate cn.pool.ntp.org >> /backup/gaige/upClock.log 2>&1 && /sbin/hwclock -w
sync
sync
echo 3 > /proc/sys/vm/drop_caches
TOP_SYS_LOAD_NUM=5
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
sync
echo "#0#" $(date +"%y-%m-%d %H:%M:%S") "pkill httpd" `ps -ef | grep httpd | wc -l`
echo "#0#" $(date +"%y-%m-%d %H:%M:%S") "pkill mysqld" `ps -ef | grep mysqld | wc -l`
/usr/sbin/apachectl stop
service mysqld stop
sleep 8
pkill httpd
pkill mysqld
sleep 8
for i in 1 2 3
do
if [ `pgrep mysqld | wc -l` -le 0 ]
then
/sbin/service mysqld start
sleep 30
echo "#1#" $(date +"%y-%m-%d %H:%M:%S") "start mysqld" `ps -ef | grep mysqld | wc -l`
fi
if [ `pgrep httpd | wc -l` -le 0 ]
then
/usr/sbin/apachectl start
sleep 30
echo "#1#" $(date +"%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l`
fi
done
else
if [ `pgrep mysqld | wc -l` -le 0 ]
then
/sbin/service mysqld start
sleep 30
echo "#2#" $(date +"%y-%m-%d %H:%M:%S") "start mysqld" `ps -ef | grep mysqld | wc -l`
fi
if [ `pgrep httpd | wc -l` -le 0 ]
then
/usr/sbin/apachectl start
sleep 30
echo "#2#" $(date +"%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l`
fi
fi[/color][/p][p=23, 2, left]然后在 [/p][p=23, 2, left]crontab -e[/p][p=23, 2, left]添加[/p][p=23, 2, left]*/3 * * * * /backup/gaige/loadavg_restart_apa_my.sh >> /backup/gaige/restart_apa_my.log[/p][p=23, 2, left]*/3 ***** 表示3分钟,/backup/gaige/loadavg_restart_apa_my 你可以自定义。[/p] 没人。。。。。都是初学者啊 没人吗?一个都没有? [p=23, 2, left][color=#ff0000]#!/bin/sh
# crontab: */3 * * * * /www/wdlinux/tools/loadavg_restart_apache.sh >> /var/log/restart_apache.log
/usr/sbin/ntpdate cn.pool.ntp.org >> /var/log/upClock.log 2>&1 && /sbin/hwclock -w
sync
sync
echo 3 > /proc/sys/vm/drop_caches
TOP_SYS_LOAD_NUM=5
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
sync
echo "#0#" $(date +"%y-%m-%d %H:%M:%S") "pkill httpd" `ps -ef | grep httpd | wc -l`
echo "#0#" $(date +"%y-%m-%d %H:%M:%S") "pkill mysqld" `ps -ef | grep mysqld | wc -l`
service httpd stop
service mysqld stop
sleep 8
pkill httpd
pkill mysqld
sleep 8
for i in 1 2 3
do
if [ `pgrep mysqld | wc -l` -le 0 ]
then
/sbin/service mysqld start
sleep 30
echo "#1#" $(date +"%y-%m-%d %H:%M:%S") "start mysqld" `ps -ef | grep mysqld | wc -l`
fi
if [ `pgrep httpd | wc -l` -le 0 ]
then
service httpd start[/color][/p][p=23, 2, left][color=#ff0000] [/color][color=#ff00]service wdapache start[/color][color=#ff0000]
sleep 30
echo "#1#" $(date +"%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l`
fi
done
else
if [ `pgrep mysqld | wc -l` -le 0 ]
then
/sbin/service mysqld start
sleep 30
echo "#2#" $(date +"%y-%m-%d %H:%M:%S") "start mysqld" `ps -ef | grep mysqld | wc -l`
fi
if [ `pgrep httpd | wc -l` -le 0 ]
then
service httpd start[/color][/p][p=23, 2, left][color=#ff0000] service wdapache start
sleep 30
echo "#2#" $(date +"%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l`
fi
fi[/color][/p][p=23, 2, left]将以上文件,保存在 [size=12px]/www/wdlinux/tools/loadavg_restart_apa_my.sh[/size][/p][p=23, 2, left]然后在 [/p][p=23, 2, left]crontab -e[/p][p=23, 2, left]添加[/p][p=23, 2, left]*/3 * * * * /www/wdlinux/tools/loadavg_restart_apa_my.sh >> /var/log/restart_apa_my.log[/p][p=23, 2, left]*/3 ***** 表示3分钟,/www/wdlinux/tools/loadavg_restart_apa_my 你可以自定义。[/p] 谢谢老大。这里边就你一个高手 {:3_48:}还是比较实用的 老大,里面的sleep 8 、sleep 30这些参数代表什么呢?
可否给改一个自动重启服务器的shell脚本呢?当超出指定的负载后,自动执行reboot的命令
麻烦老大业余时间给修改一个 老大,里面的sleep 8 、sleep 30这些参数代表什么呢?
可否给改一个自动重启服务器的shell脚本呢?当超出指定的负载后,自动执行reboot的命令
麻烦老大业余时间给修改一个 延时8,30秒 root身份登录到命令行
输入crontab -e
按下a键进入到编辑模式
输入 */3 * * * * /www/wdlinux/tools/loadavg_restart_apa_my.sh >> /var/log/restart_apa_my.log
同时按下ctrl+c退出编辑模式
按下shift+: 输入wq 退出 crontab 不知道怎么来检查有没有配置成功哈,不知道效果如何 mysql_listen.sh
#!/bin/bash
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ]
then
echo "At time: `date` :MySQL is stop .">> /var/log/mysql_messages
service mysql start
#echo "At time: `date` :MySQL server is stop."
else
echo "MySQL server is running ."
fi
以上这个可以吗
页:
[1]