#!/bin/bash
#Nginx版本升级到1.12.2
export LANG="en_US.UTF-8"
#获取Nginx的安装目录
nginx_cut_path=`ps -ef | grep nginx | grep master | awk -F" /" ‘{print $2}‘ | awk -F" " ‘{print $1}‘`
nginx_path=\/$nginx_cut_path
nginx_dir=`dirname $nginx_path`
#nginx-v查询的版本相关信息保存在nginx_ver_info
nginx_ver_info=`$nginx_dir/nginx -V 2>&1`
#截取当前Nginx的版本
nginx_ver=`echo $nginx_ver_info | awk -F"version: " ‘{print $2}‘ | awk -F" built" ‘{print $1}‘`
nginx_inst_args=`echo $nginx_ver_info | awk -F"arguments:" ‘{print $2}‘`
#判断当前版本是否已经为1.12.2,如是则退出
if [ "${nginx_ver}" = "nginx/1.12.2" ]
then
echo "当前的Nginx版本已经是1.12.2,无需升级"
exit 88
else
echo "当前版本为$nginx_ver,需要升级,正在搜索源码包nginx-1.12.2.tar.gz,请稍等..."
fi
#通过locate的方式先查找nginx-1.12.2.tar.gz
locate_nginx_tgz=`locate nginx-1.12.2.tar.gz`
if [ "${#locate_nginx_tgz}" = "0" ]
then
#如果locate没有找到,再通过find的方式查找nginx-1.12.2.tar.gz
find_nginx_tgz=`find / -type f -name nginx-1.12.2.tar.gz`
if [ "${#find_nginx_tgz}" = "0" ]
then
echo "脚本没有搜索到源码包nginx-1.12.2.tar.gz,请确定已经上传到该主机,脚本已退出执行,请确实上传后重新执行该脚本!"
exit 88
else
echo "脚本通过find命令在目录$find_nginx_tgz下找到了源码包nginx-1.12.2.tar.gz,正在解压并编译安装,请稍等..."
nginx_tgz_path=`dirname $find_nginx_tgz`
cd $nginx_tgz_path
fi
else
echo "脚本已经通过locate命令在目录$find_nginx_tgz下找到了源码包nginx-1.12.2.tar.gz,正在解压并编译安装,请稍等..."
nginx_tgz_path=`dirname $locate_nginx_tgz`
cd $nginx_tgz_path
fi
tar -zvxf $nginx_tgz_path/nginx-1.12.2.tar.gz
cd $nginx_tgz_path/nginx-1.12.2
#使用之前版本的参数进行配置
./configure $nginx_inst_args
#注意平滑升级只要make,不需要make install
make
#备份“nginx”文件
cd $nginx_dir && mv nginx nginx.old
#复制新版本的“nginx”到原版本的路径并覆盖
cp $nginx_tgz_path/nginx-1.12.2/objs/nginx $nginx_dir/
#测试配置文件
$nginx_path -t
nginx_pid=`ps -ef | grep nginx | grep master | awk -F" " ‘{print $2}‘`
find_nginx_pid1=`find / -type f -name nginx.pid | head -1`
find_nginx_pid2=`find / -type f -name nginx.pid | tail -1`
nginx_dir1=`dirname $find_nginx_pid1`
nginx_dir2=`dirname $find_nginx_pid2`
nginx_pid2=`cat $find_nginx_pid2`
if [ "${nginx_pid2}" = "${nginx_pid}" ]
then
echo "Nginx正在重命名Nginx.pid"
#发送 USR2信号给旧版本主进程号,旧版本Nginx主进程接收到-USR2信号会自动把nginx.pid文件修改成nginx.pid.oldbin
kill -USR2 `cat $nginx_dir2/nginx.pid`
echo "正在从容关闭旧进程"
# 从容关闭旧进程
kill -QUIT `cat $nginx_dir2/nginx.pid.oldbin`
else
echo "Nginx正在重命名Nginx.pid"
kill -USR2 `cat $nginx_dir1/nginx.pid`
echo "正在从容关闭旧进程"
kill -QUIT `cat $nginx_dir1/nginx.pid.oldbin`
fi
#再次截取nginx的版本号
nginx_ver_new=`$nginx_path -v 2>&1`
nginx_ver_new1=`echo $nginx_ver_new | awk -F"/" ‘{print $2}‘`
#判断更新后的ningx版本是否是1.12.2
if [ "${nginx_ver_new1}" = "1.12.2" ]
then
echo "恭喜,Nginx版本已成功升级到1.12.2!"
exit 88
else
echo "抱歉,Nginx-1.12.2未升级成功,请通过手工方式升级!"
exit 88
fi
本文出自 “菜鸟” 博客,请务必保留此出处http://979866.blog.51cto.com/969866/1982308
原文地址:http://979866.blog.51cto.com/969866/1982308