用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