From: William Lallemand Date: Sun, 28 Sep 2025 20:08:27 +0000 (+0200) Subject: ADMIN: reload: add a synchronous reload helper X-Git-Tag: v3.3-dev9~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8635c7d78906c296fe2ba4978e7ba6dc53c3cf53;p=thirdparty%2Fhaproxy.git ADMIN: reload: add a synchronous reload helper haproxy-reload is a utility script which reload synchronously using the master CLI, instead of asynchronously with kill. --- diff --git a/admin/cli/haproxy-reload b/admin/cli/haproxy-reload new file mode 100755 index 000000000..3c421a4d8 --- /dev/null +++ b/admin/cli/haproxy-reload @@ -0,0 +1,83 @@ +#!/bin/bash + +set -e + +export TIMEOUT=90 +export MASTER_SOCKET=${MASTER_SOCKET:-/var/run/haproxy-master.sock} +export RET= + +reload() { + while read -r line; do + + if [ "$line" = "Success=0" ]; then + RET=1 + elif [ "$line" = "Success=1" ]; then + RET=0 + elif [ "$line" = "Another reload is still in progress." ]; then + echo "[ALERT] Another reload is still in progress." >&2 + fi + + done < <(echo "reload" | socat -t"${TIMEOUT}" "${MASTER_SOCKET}" -) + + if [ -z "$RET" ]; then + echo "[ALERT] Couldn't finish the reload before the timeout (${TIMEOUT})." >&2 + return 1 + fi + + return "$RET" +} + +usage() { + echo "Usage:" + echo " $0 [options]*" + echo "" + echo " Trigger a reload from the master socket" + echo " Require socat" + echo " EXPERIMENTAL script!" + echo "" + echo "Options:" + echo " -S, --master-socket Use the master socket at (default: ${MASTER_SOCKET})" + echo " -d, --debug Debug mode, set -x" + echo " -t, --timeout Timeout (socat -t) (default: ${TIMEOUT})" + echo " -v, --verbose Verbose mode" + echo " -h, --help This help" + echo "" + echo "Examples:" + echo " $0 -S ${MASTER_SOCKET} -d ${TIMEOUT}" +} + + +main() { + while [ -n "$1" ]; do + case "$1" in + -S|--master-socket) + MASTER_SOCKET="$2" + shift 2 + ;; + -t|--timeout) + TIMEOUT="$2" + shift 2 + ;; + -d|--debug) + DEBUG=1 + shift + ;; + -h|--help) + usage "$@" + exit 0 + ;; + *) + echo "[ALERT] ($$) : Unknown option '$1'" >&2 + usage "$@" + exit 1 + ;; + esac + done + + if [ -n "$DEBUG" ]; then + set -x + fi +} + +main "$@" +reload