nginx_单机平滑升级

server/2024/9/22 21:39:51/
#!/bin/bash# 定义要下载的 Nginx 源码包的 URL 和保存路径
nginx_tar="http://nginx.org/download/nginx-1.19.0.tar.gz"
nginx_tar_file="/tmp/nginx-1.19.0.tar.gz"
nginx_version="nginx-1.19.0"
nginx_path=$(which nginx)  # 获取 Nginx 的路径# 检查 Nginx 是否已安装并获取路径
function check_nginx_installed {# -z 判断字符串是否为空if [ -z "$nginx_path" ]; thenecho "Nginx is not installed or not found in PATH"exit 1fiecho "Nginx is installed at: $nginx_path"  # 输出 Nginx 路径
}# 检查 Nginx 进程是否在运行
function check_nginx_status {nginx_status=$(ps -ef | grep -v grep | grep nginx | wc -l)if [ "$nginx_status" -gt 0 ]; thenecho "nginx is running"elseecho "nginx is not running"exit 1fi
}# 下载 Nginx 源码包
function download_nginx {if [ ! -f "$nginx_tar_file" ]; thenecho "Downloading $nginx_version..."wget -P /tmp "$nginx_tar"elseecho "$nginx_version already exists"fi
}# 解压 Nginx 源码包
function extract_nginx {cd /tmp if [ ! -f /tmp"$nginx_version" ]; thenecho "Extracting $nginx_version..."tar -zxvf $nginx_tar_filefi
}# 安装yum -y install pcre-devel zlib-devel openssl-devel  gd-devel geoip-devel gcc gcc-c++ make
function install_dependence {yum -y install pcre-devel zlib-devel openssl-devel  gd-devel geoip-devel gcc gcc-c++ make coreutils
}# 编译和安装 Nginx
function compile_and_install_nginx {cd /tmp/$nginx_version || exitecho "Checking nginx compile info..."nginx_compile_info=$($nginx_path -V 2>&1 | sed -n 's/.*configure arguments: //p')echo "Configuring nginx...   $nginx_compile_info"./configure $nginx_compile_infoecho "Compiling nginx..."makemv $nginx_path{,.bak}cp objs/nginx $nginx_path
}# 获取 Nginx PID 文件路径
function get_nginx_pid_path {nginx_pid_path=$($nginx_path -V 2>&1 | sed -n 's/.*--pid-path=\([^ ]*\).*/\1/p')echo "$nginx_pid_path"
}# 检查 PID 文件
function check_nginx_pid {local nginx_pid_pathnginx_pid_path=$(get_nginx_pid_path)# 检查 PID 文件是否存在if [ -f "$nginx_pid_path" ]; thenlocal master_pidmaster_pid=$(cat "$nginx_pid_path")  # 获取主进程 PID# 获取当前主进程和工作进程的数量local master_countlocal worker_countmaster_count=$(pgrep -c -F "$nginx_pid_path")  # 计算主进程数量worker_count=$(pgrep -c -P "$master_pid" -u nginx)  # 计算工作进程数量echo "Current master process PID: $master_pid"echo "Number of master processes: $master_count"echo "Number of worker processes: $worker_count"# 向主进程发送信号以重新加载kill -USR2 "$master_pid"# 处理旧版本进程if [ -f "${nginx_pid_path}.oldbin" ]; thenkill -WINCH "$(cat "${nginx_pid_path}.oldbin")"kill -QUIT "$(cat "${nginx_pid_path}.oldbin")"fielseecho "$nginx_version PID file does not exist"fi
}# 检查 Nginx 进程状态
function check_nginx_process {local cpu_corescpu_cores=$(grep -c 'cpu cores' /proc/cpuinfo)local nginx_pid_pathnginx_pid_path=$(get_nginx_pid_path)if [ -s "$nginx_pid_path" ]; thenlocal master_numlocal slave_nummaster_num=$(pgrep -c -F "$nginx_pid_path")slave_num=$(pgrep -c -P "$(cat "$nginx_pid_path")" -u nginx)if [ "$master_num" -eq 0 ] || [ "$slave_num" -lt "$cpu_cores" ]; thenecho "Nginx process may have a problem!!!"fielseecho "Nginx PID file may have a problem!!!"fiecho "Nginx process is running with pid $nginx_pid_path"
}# 主程序逻辑
check_nginx_installed
check_nginx_status
download_nginx
extract_nginx
install_dependence
compile_and_install_nginx
check_nginx_pid
check_nginx_process

http://www.ppmy.cn/server/120474.html

相关文章

【Kubernetes】常见面试题汇总(二十四)

目录 71.假设一家公司想要修改它的部署方法,并希望建立一个更具可扩展性和响应性的平台。您如何看待这家公司能够实现这一目标以满足客户需求? 72.考虑一家拥有非常分散的系统的跨国公司,期待解决整体代码库问题。您认为公司如何解决他们的问…

前端环境搭建

配置国内镜像 nvm node_mirror https://npmmirror.com/mirrors/node/ nvm npm_mirror https://npmmirror.com/mirrors/npm/ 安装指定版本node并切换(以16.17.0为例),过程中会弹出两次授权,确认即可 nvm install 16.17.0 nvm us…

JavaScript在数据可视化领域的探索与实践

目录 引言 JavaScript可视化库概览 D3.js基础入门 1. 引入D3.js 2. 绘制简单的条形图 3. 添加轴 交互性与动画 实际应用场景 结论 引言 在数据驱动决策日益重要的今天,数据可视化成为连接数据与洞察的桥梁。JavaScript,作为前端开发的主力军&am…

配置RHEL和centOS的阿里云镜像源

备份 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 编辑 YUM 仓库配置文件 sudo vi /etc/yum.repos.d/CentOS-Base.repo 配置内容: [base] nameCentOS-7 - Base - Aliyun baseurlhttp://mirrors.aliyun.com/centos/7/os…

Flask-SQLAlchemy一对多 一对一 多对多关联

一. 组织一个 Flask 项目通常需要遵循一定的结构,以便代码清晰、可维护。下面是一个典型的 Flask 项目结构: my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── models.py │ ├── views.py │ ├── forms.py │ ├── tem…

react native(expo)多语言适配

项目基于 expo框架 开发。请先配置好 expo 开发环境 1.引入i18n-js npx expo install i18n-js 2.新建languages文件夹,其中包括英文、中文等语种目录。结构如下: *.json文件为语种翻译后的json键值对,用于UI中引用; { "appName&q…

计算机毕业设计 美发管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

JAVA并发编程系列(8)CountDownLatch核心原理

拼多多 D2面试,现场编程模拟拼团,10人拼团成功。限时2分钟!开始吧.....!在面试过程经常有算法题、模拟现实案例、经典功能设计、核心原理分析这种。这些看似简单,实际需要候选人有非常扎实的基础,才能应付这…