nginx升级脚本

#!/bin/bash

# Date: 2022-11-22
# Author: lizexin
# Explain: Nginx Upgrade script

echo -e "\033[35m 请将安装包放在/data/soft \033[0m"

read -p "请输入现有Nginx安装路径,如(/data/nginx):  " Old_nginx_path
echo -e "\033[32m 开始获取旧Nginx安装参数 \033[0m"
Param=`${Old_nginx_path}/sbin/nginx -V |& awk -F [:] '/^configure/{print $2}'`
echo -e "\033[35m 旧版本安装参数为: \033[0m" $Param

cd /data/soft
read -p "请输入准备更新的Nginx版本,如(1.10.2): " New_Nginx_version
echo -e "\033[35m 开始解压 \033[0m"
tar -zxvf nginx-${New_Nginx_version}.tar.gz 

echo -e "\033[32m 开始编译新nginx源码包,请等待... \033[0m"
cd nginx-${New_Nginx_version}
./configure ${Param} >> /dev/null 2>&1
make >> /dev/null 2>&1

if [ $? -eq 0 ];then
    echo -e "\033[32m 编译完成,继续进行... \033[0m"
else
    echo -e "\033[31m 编译失败,请检查失败原因... \033[0m"
    exit 1
fi
echo -e "\033[32m 开始备份旧nginx二进制配置文件 \033[0m"
# 备份旧nginx二进制文件的配置文件(期间nginx服务不停止)
mv ${Old_nginx_path}/sbin/nginx ${Old_nginx_path}/sbin/nginx_$(date +%F)

# 复制新nginx二进制文件
echo -e "\033[32m 开始复制新nginx二进制配置文件 \033[0m"
cp /data/soft/nginx-${New_Nginx_version}/objs/nginx ${Old_nginx_path}/sbin/nginx

# 测试新版本nginx是否正常
echo -e "\033[32m 开始验证新版本nginx是否正常... \033[0m"
successful=`${Old_nginx_path}/sbin/nginx -t  |& awk '/successful/{print $NF}'`
if [ "$successful" == "successful" ];then
    echo -e "\033[32m 版本正常,继续进行... \033[0m"
    sleep 3;
else
    echo -e "\033[31m 版本异常,请检查失败原因... \033[0m"
    exit 2
fi 

# 给nginx发送平滑迁移信号
echo -e "\033[32m 开始给nginx发送平滑迁移信号... \033[0m"
kill -USR2 `cat ${Old_nginx_path}/logs/nginx.pid`
sleep 3;

# 关闭旧的nginx进程
echo -e "\033[32m 开始关闭旧的nginx进程... \033[0m"
kill -WINCH `cat ${Old_nginx_path}/logs/nginx.pid.oldbin`
sleep 3;

# 结束工作进程
kill -HUP `cat ${Old_nginx_path}/logs/nginx.pid.oldbin`
kill -QUIT `cat ${Old_nginx_path}/logs/nginx.pid.oldbin`
sleep 3;

# 验证nginx升级是否完成
echo -e "\033[32m 验证升级是否完成... \033[0m"
${Old_nginx_path}/sbin/nginx -V

sleep 3;
echo -e "\033[32m 升级结束... \033[0m"
exit 0

李泽信 发布于 2022-11-22 15:31

个人资料

搜索

日历

时间进度

    今日剩余 59.6%
    本周剩余 37.1%
    本月剩余 22.0%
    本年剩余 52.2%

访问统计