# This file contains common functionality for all postgresql server # package init.d scripts. It is usually included by # /etc/init.d/postgresql-X.Y. . /lib/lsb/init-functions # do pg_ctlcluster action $1 to all clusters of version $2 with command # description $3; output according to Debian Policy for init scripts do_ctl_all() { [ "$1" ] || { echo "Error: invalid command '$1'" >&2; exit 1; } [ "$2" ] || { echo "Error: invalid version '$2'" >&2; exit 1; } [ -d "/etc/postgresql/$2" ] || return 0 [ "$(ls /etc/postgresql/$2)" ] || return 0 [ -x "/usr/lib/postgresql/$2/bin/postmaster" ] || return 0 status=0 log_daemon_msg "$3" for c in /etc/postgresql/"$2"/*; do [ -e "$c/pgdata" ] || continue name=$(basename "$c") # evaluate start.conf if [ -e "$c/start.conf" ]; then start=$(sed 's/#.*$//; /^[[:space:]]*$/d; s/^\s*//; s/\s*$//' "$c/start.conf") else start=auto fi [ "$start" = "auto" ] || continue log_progress_msg "$name" set +e ERRMSG=$(pg_ctlcluster "$2" "$name" $1 2>&1) res=$? set -e # Do not fail on success or if cluster is already/not running [ $res -eq 0 ] || [ $res -eq 2 ] || status=$(($status || $res)) done if [ $status -ne 0 -a -n "$ERRMSG" ]; then log_failure_msg "$ERRMSG" fi log_end_msg $status return $status } # start all clusters of version $1 # output according to Debian Policy for init scripts start() { # create socket directory if [ -d /var/run/postgresql ]; then chmod 2775 /var/run/postgresql else install -d -m 2775 -o postgres -g postgres /var/run/postgresql fi do_ctl_all start "$1" "Starting PostgreSQL $1 database server" } # stop all clusters of version $1 # output according to Debian Policy for init scripts stop() { do_ctl_all stop "$1" "Stopping PostgreSQL $1 database server" } # restart all clusters of version $1 # output according to Debian Policy for init scripts restart() { do_ctl_all restart "$1" "Restarting PostgreSQL $1 database server" } # reload all clusters of version $1 # output according to Debian Policy for init scripts reload() { do_ctl_all reload "$1" "Reloading PostgreSQL $1 database server" } status() { pg_lsclusters | awk 'BEGIN {rc=0} {print; if ($4 == "down") rc=3} END { exit rc }' } # start pg_autovacuum for all clusters of version $1 autovac_start() { do_ctl_all autovac-start "$1" "Starting PostgreSQL $1 autovacuum daemon" } # stop pg_autovacuum for all clusters of version $1 autovac_stop() { do_ctl_all autovac-stop "$1" "Stopping PostgreSQL $1 autovacuum daemon" } # restart pg_autovacuum for all clusters of version $1 autovac_restart() { do_ctl_all autovac-restart "$1" "Restarting PostgreSQL $1 autovacuum daemon" }