最近公司里面每次上线后端app的load都会狂飙,只好重启web服务器,以断开旧的连接,好让新的连接能够进来,所以,写一个重启的脚本来完成这项任务。

  因为web服务器有两个类型,nginx和apache,需要设置两个数组,一个保存所有机器的列表,一个保存nginx的机器列表,在遍历web服务器列表的同时,判断是否属于nginx的列表,如果是执行nginx fast-cgi的重启,如果不是,重启apache。

  下面是脚本的具体内容:

 

 
    
  1. #!/bin/bash  
  2. . common.sh  
  3. ng=( "10.10.3.2" "10.10.3.3" "10.10.3.13" "10.10.3.15" "10.10.3.39" )  
  4.  
  5. app_restart () {  
  6.   for i in "$@" 
  7.   do    
  8.       echo "${ng[@]}" |grep -wq "$i" 
  9.        if [ $? == 0 ];then 
  10.           TIME=`date +%F-%T`  
  11.           ssh 10.10.3.2 -t "sudo sudo /etc/init.d/php-fpm reload" 
  12.               if [ $? -ne 0 ];then 
  13.                   echo "$TIME $i Failed to start" |tee ./error_list  
  14.               fi    
  15.           echo "$TIME $i nginx" 
  16.       else 
  17.           TIME=`date +%F-%T`  
  18.           echo "$TIME $i" 
  19.           ssh $i -t "sudo /etc/init.d/httpd graceful" 
  20.               if [ $? -ne 0 ];then 
  21.                   echo "$TIME $i Failed to start" |tee ./error_list  
  22.               fi    
  23.           echo "$TIME $i apache" 
  24.  
  25.        fi    
  26.           sleep 10  
  27. #          sleep 1  
  28.     done  
  29. }  
  30.  
  31. case "$1" in 
  32.     city)  
  33.     app_restart ${arrCityAppServer[@]}   
  34. ;;  
  35.     my)   
  36.     app_restart ${arrMyAppServer[@]}   
  37. ;;  
  38.     *)    
  39.     echo $"Usage: $0 {city|my}" 
  40.     exit 1  
  41.     esac