#!/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:
系统运维