Files
2026-10-04 04:07:15 +00:00

77 lines
2.4 KiB
Bash

#!/bin/sh
# PROVIDE: pg_auto_failover
# REQUIRE: DAEMON mountlate
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# pg_auto_failover_enable (bool): Set to NO by default.
# Set it to YES to enable pg_auto_failover.
# pg_auto_failover_user (string): Set user to run pg_autoctl
# Default is "postgres".
# pg_auto_failover_pgdata (path): REQUIRED. Set the PGDATA directory.
# This should point to your monitor or keeper data directory.
# No default - must be explicitly configured.
# pg_auto_failover_name (string): Optional friendly name for the node.
# Useful for distinguishing nodes in monitor logs.
# Default is "".
# pg_auto_failover_hostname (string): Optional hostname or IP for node.
# Used by other nodes to connect to this node.
# Default is "" (pg_autoctl will auto-detect).
# pg_auto_failover_pgport (int): PostgreSQL port number.
# Default is "".
. /etc/rc.subr
name="pg_auto_failover"
rcvar="${name}_enable"
pidfile="/var/run/${name}.pid"
logfile="/var/log/${name}.log"
command="/usr/sbin/daemon"
procname="%%PREFIX%%/bin/pg_autoctl"
start_cmd="${name}_start"
load_rc_config ${name}
: ${pg_auto_failover_enable:=no}
: ${pg_auto_failover_user:=postgres}
: ${pg_auto_failover_name:=""}
: ${pg_auto_failover_hostname:=""}
: ${pg_auto_failover_pgport:=""}
start_precmd=pg_auto_failover_startprecmd
pg_auto_failover_startprecmd() {
if [ -z "${pg_auto_failover_pgdata}" ]; then
err 1 "pg_auto_failover_pgdata is not set"
fi
if checkyesno postgresql_enable 2>/dev/null; then
err 1 "postgresql_enable must be NO when using pg_auto_failover (pg_autoctl manages PostgreSQL)"
fi
}
pg_auto_failover_start() {
local args
args="--pgdata ${pg_auto_failover_pgdata}"
if [ -n "${pg_auto_failover_pgport}" ]; then
args="${args} --pgport ${pg_auto_failover_pgport}"
fi
if [ -n "${pg_auto_failover_name}" ]; then
args="${args} --name ${pg_auto_failover_name}"
fi
if [ -n "${pg_auto_failover_hostname}" ]; then
args="${args} --hostname ${pg_auto_failover_hostname}"
fi
${command} -t ${name} \
-p ${pidfile} \
-f -H -o ${logfile} \
-u ${pg_auto_failover_user} \
${procname} run ${args}
}
run_rc_command "$1"