HAProxy编译安装与平滑重启的bash shell脚本

#!/bin/bash
set -euo pipefail

# 编译HAProxy
echo "开始编译HAProxy..."
if ! make PREFIX=/opt/haproxy TARGET=linux-glibc ARCH=x86_64 USE_OPENSSL=1 ADDLIB=-lz; then
    echo "ERROR: HAProxy编译失败!" >&2
    exit 1
fi

# 安装HAProxy
echo "开始安装HAProxy..."
if ! make PREFIX=/opt/haproxy install; then
    echo "ERROR: HAProxy安装失败!" >&2
    exit 1
fi

# 校验配置文件
echo "校验HAProxy配置文件..."
if /opt/haproxy/sbin/haproxy -f /opt/haproxy/conf/hy.conf -c; then
    # 获取运行中的HAProxy进程PID
    hapid="$(ps -ef | grep -E "[/]opt/haproxy/sbin/haproxy.*hy.conf" | awk '{print $2}')"
    
    if [[ -n "$hapid" ]]; then
        echo "发现运行中的HAProxy进程:$hapid,开始平滑重启..."
        pid_array=($hapid)
        for pid in "${pid_array[@]}"; do
            if [[ "$pid" -gt "1024" ]]; then
                /opt/haproxy/sbin/haproxy -f /opt/haproxy/conf/hy.conf -dr -dV -D -sf $pid
                sleep 1
            fi
        done
        sleep 2
    else
        echo "未发现运行中的HAProxy进程,直接启动..."
        /opt/haproxy/sbin/haproxy -f /opt/haproxy/conf/hy.conf -dr -dV -D
    fi

    # 验证进程状态
    echo "当前HAProxy进程状态:"
    ps -ef | grep -E "[/]opt/haproxy/sbin/haproxy.*hy.conf"
else
    echo "ERROR: HAProxy配置文件 /opt/haproxy/conf/hy.conf 校验失败!" >&2
    exit 1
fi

echo "HAProxy编译安装/重启完成!"
Categories: 系统运维