ç¨èæ¬å°±å¯ä»¥æå®çï¼ å½åç°CPUå ç¨çè¿é«æ¶ï¼ä¼èªå¨éå¯ç¸å
³ç¨åºãã
# 设置æ大å
åå ç¨ç¾åæ¯
PID_MEM_MAX=â85â³
# 设置æ大系ç»è´è½½
SYS_LOAD_MAX=â1â³
# 设置éè¦çæ§çæå¡å称
NAME_LIST=âphp5-cgi mysqlâ
for NAME in $NAME_LIST
do
# åå§åå
åç»è®¡
PID_MEM_SUM=0
# è·å该ç¨åºæ»è¿ç¨æ°
PID_NUM_SUM=`ps aux | grep $NAME | wc -l`
# ååºæ¯ä¸ªè¿ç¨å
åå ç¨ç¾åæ¯
PID_MEM_LIST=`ps aux | grep $NAME | awk â{print $4}â`
# 计ç®ææè¿ç¨æ»å
åå ç¨
for PID_MEM in $PID_MEM_LIST
do
PID_MEM_SUM=`echo $PID_MEM_SUM + $PID_MEM | bc`
done
# è·åæè¿ä¸åéç³»ç»è´è½½
SYS_LOAD=`uptime | awk â{print $(NF-2)}â | sed âs/,//â`
# æ¯è¾å
åå ç¨åç³»ç»è´è½½æ¯å¦è¶
è¿éå¼
MEM_VULE=`awk âBEGIN{print(ââ$PID_MEM_SUMââ>=ââ$PID_MEM_MAXââ?â1â³:â0â³)}â`
LOAD_VULE=`awk âBEGIN{print(ââ$SYS_LOADââ>=ââ$SYS_LOAD_MAXââ?â1â³:â0â³)}â`
# å¦æç³»ç»å
åå ç¨åç³»ç»è´è½½è¶
è¿éå¼ï¼åè¿è¡ä¸é¢æä½ã
if [ $MEM_VULE = 1 ] || [ $LOAD_VULE = 1 ] ;then
# åå
¥æ¥å¿
echo $(date +â%y-%m-%d %H:%M:%Sâ) âkillall $NAMEâ â(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)â>> /var/log/autoreboot.log
# æ£å¸¸åæ¢æå¡
/etc/init.d/$NAME stop
sleep 3
# 强å¶å
³é
pkill $NAME
# éå¯
/etc/init.d/$NAME start
#åå
¥æ¥å¿
echo $(date +â%y-%m-%d %H:%M:%Sâ) âstart $NAMEâ â(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)â >> /var/log/autoreboot.log
else
echo â$NAME very health!(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)â > /dev/null
fi
done
以ä¸ä»£ç ä¿å为ä¸ä¸ªæ件ï¼ä¾å¦ï¼auto_reboot.sh
æ·»å 计åä»»å¡ï¼è®¾ç½®æ¯åéæ£æ¥ä¸æ¬¡ï¼æ³¨ææ件çä½ç½®è¦ææ£ç¡®ï¼
crontab -e
* * * * * /bin/bash/root/auto_reboot.sh
请确ä¿æ¨çLinuxç³»ç»ä¸å·²ç»å®è£
äºbcï¼å¦åä¼åºç°é误ãæ¥çæ¯å¦å®è£
äºbcå¯ä»¥ä½¿ç¨å½ä»¤ï¼
bc -v
å¦æ没æå®è£
ï¼centoså¯ä»¥ç¨ yum -y install bc å®è£
ï¼ç¶åæ§è¡å½ä»¤ï¼
sh /bin/bash/root/auto_reboot.sh
CentOS VPSæå¡å¨æ ¹æ®CPUè´è½½åå
åå ç¨èªå¨éå¯çbash shellèæ¬ï¼
# !/bin/sh
# usage: */2 * * * * root /root/checkload.sh
# [CentOS]VPSæå¡å¨æ ¹æ®CPUè´è½½åå
åå ç¨èªå¨éå¯èæ¬
# 设置æå°å©ä½å
åï¼ä¸è¬è³å°è¦å©ä½50Må¯ç¨ï¼åä½å
ï¼
FREE_MEM_MIN=â50â³
# 设置æ大系ç»è´è½½
SYS_LOAD_MAX=â3â³
# 设置éå¯æå¡çæå°å©ä½å
åï¼åä½å
ï¼
RESTART_FREE_MEM_MIN=â500â³
# 设置éè¦çæ§çæå¡å称
NAME_LIST=âhttpd mysqldâ
for NAME in $NAME_LIST
do
# è·å¾å©ä½å
åï¼åä½å
ï¼
FREE_MEM=`free -m|grep Mem|awk â{print $4}â`
# è·å¾å·²ç¨å
åï¼åä½å
ï¼
# FREE_MEM=`free -m|grep Mem|awk â{print $3}â`
# è·åæè¿ä¸åéç³»ç»è´è½½
SYS_LOAD=`uptime | awk â{print $(NF-2)}â | sed âs/,//â`
# æ¯è¾å
åå ç¨åç³»ç»è´è½½æ¯å¦è¶
è¿éå¼
MEM_VULE=`awk âBEGIN{print(ââ$FREE_MEMââ<ââ$FREE_MEM_MINââ?â1â³:â0â³)}â`
LOAD_VULE=`awk âBEGIN{print(ââ$SYS_LOADââ>=ââ$SYS_LOAD_MAXââ?â1â³:â0â³)}â`
# æµè¯ç»æ
# LOAD_VULE=â1â³
# echo $(date +â%y-%m-%d %H:%M:%Sâ) âDEBUG $NAMEâ â(FREE_MEM:$FREE_MEM|$MEM_VULE,LOAD:$SYS_LOAD|$LOAD_VULE)â>> /var/log/autoreboot_debug.log
# å¦æç³»ç»å
åå ç¨åç³»ç»è´è½½è¶
è¿éå¼ï¼åè¿è¡ä¸é¢æä½ã
if [ $MEM_VULE = 1 ] || [ $LOAD_VULE = 1 ] ;then
# åå
¥æ¥å¿
echo $(date +â%y-%m-%d %H:%M:%Sâ) âkillall $NAMEâ â(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)â>> /var/log/autoreboot.log
# æ£å¸¸åæ¢æå¡
service $NAME stop
sleep 3
# 强å¶å
³é
skill $NAME
# éå¯
sleep 10
for i in 1 2 3
do
FREE_MEM=`free -m|grep Mem|awk â{print $4}â`
MEM_VULE=`awk âBEGIN{print(ââ$FREE_MEMââ>=ââ$RESTART_FREE_MEM_MINââ?â1â³:â0â³)}â`
if [ `pgrep $NAME | wc -l` -le 0 ] && [ $MEM_VULE = 1 ]
then
service $NAME start
sleep 15
echo âAutoStart:â $(date +â%y-%m-%d %H:%M:%Sâ) âstart $NAMEâ `ps -ef | grep $NAME | wc -l` > /var/log/autoreboot.log
fi
done
# åå
¥æ¥å¿
echo $(date +â%y-%m-%d %H:%M:%Sâ) âstart $NAMEâ â(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)â >> /var/log/autoreboot.log
else
MEM_VULE=`awk âBEGIN{print(ââ$FREE_MEMââ>=ââ$RESTART_FREE_MEM_MINââ?â1â³:â0â³)}â`
if [ `pgrep $NAME | wc -l` -le 0 ] && [ $MEM_VULE = 1 ]
then
service $NAME start
sleep 15
echo âAutoStart:â $(date +â%y-%m-%d %H:%M:%Sâ) âstart $NAMEâ `ps -ef | grep $NAME | wc -l` > /var/log/autoreboot.log
else
echo â$NAME very health!(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)â > /dev/null
fi
fi
done