用Shell脚本实现Nginx平滑升级

用Shell脚本实现Nginx平滑升级

!!!yum安装的不可以进行编译升级

#!/bin/bash
nginx_compile=$(/usr/local/nginx/sbin/nginx -V 2>&1 | sed -n 's/.*configure arguments: //p')
nginx_route='/usr/local/nginx'
nginx_ve='1.20.1'
#下载解压升级包
wget http://nginx.org/download/nginx-$nginx_ve.tar.gz &> /dev/null
if [ $? -eq 0 ];then
    tar xf nginx-$nginx_ve.tar.gz  &> /dev/null
      if [ $? -eq 0  ];then
        echo "解压成功"
      else
        echo "解压失败"
      fi
else
    echo "升级包下载失败"
fi

#安装编译软件并编译
yum -y install pcre-devel zlib-devel openssl-devel  gd-devel geoip-devel gcc gcc-c++ make &> /dev/null
if [ $? -eq 0 ];then
    echo "编译软件下载成功"
else
    echo "编译软件下载失败"
fi

cd nginx-$nginx_ve
./configure $nginx_compile &> /dev/null
if [ $? -eq 0 ];then
    make &> /dev/null
      if [ $? -eq 0 ];then
        echo "编译成功"
      else
        echo "编译失败"
      fi
else
    echo "预编译失败"
fi

#备份旧的nginx,将编译好的新nginx文件拷贝到安装目录中
mv $nginx_route/sbin/nginx{
    
    ,.bak}
cp objs/nginx $nginx_route/sbin/

#检查新nginx对原有文件是否兼容并启动
$nginx_route/sbin/nginx -t
if [ $? -eq 0 ];then
    kill -USR2 `cat $nginx_route/logs/nginx.pid` &> /dev/null
else
    echo "与原配置文件不兼容"
fi

#平缓停止旧服务的woker,master
kill -WINCH `cat $nginx_route/log/nginx.pid.oldbin` &> /dev/null
kill -QUIT `cat $nginx_route/log/nginx.pid.oldbin` &> /dev/null

#检查是否升级成功,进程是否存在
nginx_new=$($nginx_route/sbin/nginx -v 2>&1 |awk -F"/" '{print $2}')
if [ "$nginx_new" == "$nginx_ve" ];then
    ps -aux |grep nginx
     if [ $? -eq 0 ];then
        echo "进程存在"
      else 
        echo "进程不存在"
     fi
else
   echo "升级失败"
fi

猜你喜欢

转载自blog.csdn.net/qq1271566323/article/details/142399956