1. 程式人生 > >升級Nginx到1.12.2的腳本

升級Nginx到1.12.2的腳本

升級nginx到1.12.2的shell腳本

#!/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

升級Nginx到1.12.2的腳本