背景:web服务器上默认跑apache,但是偶尔会有负载超级高的时候,(可能是配置了华盾),idc机房又要求必须使用华盾,而且华盾不支持nginx。我们的服务器跑nginx两年一直好好的,可换apache后总是负载很高。所以我想到,当负载高到一定程度时,就切换nginx,当负载降下来再切换回apache。把这个脚本丢到后台运行即可。
- #! /bin/bash
- killphp(){
- if `pgrep 'php-fpm'>/dev/null` ; then
- /usr/local/php/sbin/php-fpm stop
- killall -9 php-fpm
- fi
- }
- killnginx(){
- if `pgrep 'nginx' >/dev/null`; then
- /etc/init.d/nginx stop
- killall -9 nginx
- fi
- }
- killhttpd(){
- if `pgrep 'httpd'>/dev/null`; then
- killall httpd
- kill -9 `ps aux |grep httpd |grep -v 'grep ' |awk '{print $2}'`
- fi
- }
- starthttpd(){
- if `pgrep 'httpd'>/dev/null`; then
- echo ok >/dev/null
- else
- /usr/local/apache2/bin/apachectl start
- fi
- }
- startibsys(){
- if `pgrep 'ibsysServer'>/dev/null`; then
- echo ok >/dev/null
- else
- /usr/local/ibsys/ibsysServer
- fi
- }
- Load(){
- w|grep load |awk -F 'average:' '{print $2}'|awk '{print $1}' |cut -d'.' -f 1
- }
- rmail="15810682599@139.com"
- L="35"
- while :; do
- killphp
- killnginx
- starthttpd
- startibsys
- load=`Load`
- if [ $load -gt $L ]; then
- free >>/tmp/load.log
- top -bn1 |head -n 100 >>/tmp/load.log
- killhttpd
- killall -9 ibsysServer
- sleep 30
- killphp
- killnginx
- /usr/local/php/sbin/php-fpm start 2>/tmp/mail.txt
- killhttpd
- /etc/init.d/nginx start 2>>/tmp/mail.txt
- echo "web-rr load is more than 50 and the apache stop." >>/tmp/mail.txt && mail -s 'web-rr load' $rmail /mail.txt
- sleep 120
- load2=`Load`
- if [ $load2 -lt 15 ]; then
- killphp
- killnginx
- starthttpd
- startibsys
- fi
- fi
- sleep 3
- done
编辑回复