#!/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" ]; then
echo "Nginx is not installed or not found in PATH"
exit 1
fi
echo "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 ]; then
echo "nginx is running"
else
echo "nginx is not running"
exit 1
fi
}
# 下载 Nginx 源码包
function download_nginx {
if [ ! -f "$nginx_tar_file" ]; then
echo "Downloading $nginx_version..."
wget -P /tmp "$nginx_tar"
else
echo "$nginx_version already exists"
fi
}
# 解压 Nginx 源码包
function extract_nginx {
cd /tmp
if [ ! -f /tmp"$nginx_version" ]; then
echo "Extracting $nginx_version..."
tar -zxvf $nginx_tar_file
fi
}
# 安装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 || exit
echo "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_info
echo "Compiling nginx..."
make
mv $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_path
nginx_pid_path=$(get_nginx_pid_path)
# 检查 PID 文件是否存在
if [ -f "$nginx_pid_path" ]; then
local master_pid
master_pid=$(cat "$nginx_pid_path") # 获取主进程 PID
# 获取当前主进程和工作进程的数量
local master_count
local worker_count
master_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" ]; then
kill -WINCH "$(cat "${nginx_pid_path}.oldbin")"
kill -QUIT "$(cat "${nginx_pid_path}.oldbin")"
fi
else
echo "$nginx_version PID file does not exist"
fi
}
# 检查 Nginx 进程状态
function check_nginx_process {
local cpu_cores
cpu_cores=$(grep -c 'cpu cores' /proc/cpuinfo)
local nginx_pid_path
nginx_pid_path=$(get_nginx_pid_path)
if [ -s "$nginx_pid_path" ]; then
local master_num
local slave_num
master_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" ]; then
echo "Nginx process may have a problem!!!"
fi
else
echo "Nginx PID file may have a problem!!!"
fi
echo "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
nginx_单机平滑升级
最新推荐文章于 2024-09-25 19:21:07 发布