#!/bin/bash
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)
function check_nginx_installed {if [ -z "$nginx_path" ]; thenecho "Nginx is not installed or not found in PATH"exit 1fiecho "Nginx is installed at: $nginx_path"
}
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
}
function download_nginx {if [ ! -f "$nginx_tar_file" ]; thenecho "Downloading $nginx_version..."wget -P /tmp "$nginx_tar"elseecho "$nginx_version already exists"fi
}
function extract_nginx {cd /tmp if [ ! -f /tmp"$nginx_version" ]; thenecho "Extracting $nginx_version..."tar -zxvf $nginx_tar_filefi
}
function install_dependence {yum -y install pcre-devel zlib-devel openssl-devel gd-devel geoip-devel gcc gcc-c++ make coreutils
}
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
}
function get_nginx_pid_path {nginx_pid_path=$($nginx_path -V 2>&1 | sed -n 's/.*--pid-path=\([^ ]*\).*/\1/p')echo "$nginx_pid_path"
}
function check_nginx_pid {local nginx_pid_pathnginx_pid_path=$(get_nginx_pid_path)if [ -f "$nginx_pid_path" ]; thenlocal master_pidmaster_pid=$(cat "$nginx_pid_path") 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
}
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