linux系统资源负载过高自动重启Apache的shell脚本


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


最新回复 (2)
全部楼主
  • Cola 2017-4-26
    引用 2
    正在正常使用中。效果还是不错的!
  • Cola 2017-4-27
    引用 3

    本脚本是连着mysql一起重启的。如果你的MYSQL已经升级为mariadb,请修改脚本内的mysqld为mariadb。

返回