Linux服务中配置了Apache的,防止由于Loadavg过高而产生web不能访问。
使用此脚本能linux系统资源负载过高自动重启Apache:
#!/bin/sh
# crontab: */3 * * * * /home/soft/loadavg_restart_apache.sh >> /home/soft/restart_apache.log
TOP_SYS_LOAD_NUM=5
SYS_LOAD_NUM=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`
MIN_RAM=64
FREE_RAM=`free -m| grep Mem|awk '{print $4}'`
echo $(date +"%y-%m-%d") `uptime`
if [ `echo "$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM"|bc` -eq 1 ] || [ `echo "$FREE_RAM < $MIN_RAM"|bc` -eq 1 ]
then
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
加入计划执行
每3分钟执行一次检测,并将检测结果写入日志 restart_apache.log
*/3 * * * * /home/soft/loadavg_restart_apache.sh >> /home/soft/restart_apache.log