summaryrefslogtreecommitdiffstats
path: root/debian/init.d-functions
diff options
context:
space:
mode:
Diffstat (limited to 'debian/init.d-functions')
-rw-r--r--debian/init.d-functions112
1 files changed, 112 insertions, 0 deletions
diff --git a/debian/init.d-functions b/debian/init.d-functions
new file mode 100644
index 0000000..a413198
--- /dev/null
+++ b/debian/init.d-functions
@@ -0,0 +1,112 @@
+# This file contains common functionality for all postgresql server
+# package init.d scripts. It is usually included by
+# /etc/init.d/postgresql
+
+init_functions=/lib/lsb/init-functions
+#redhat# init_functions=/usr/share/postgresql-common/init-functions-compat
+. $init_functions
+
+PGBINROOT="/usr/lib/postgresql/"
+#redhat# PGBINROOT="/usr/pgsql-"
+
+# 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 "$PGBINROOT$2/bin/postgres" ] || return 0
+
+ status=0
+ log_daemon_msg "$3"
+ for c in /etc/postgresql/"$2"/*; do
+ [ -e "$c/postgresql.conf" ] || 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
+ if [ "$1" = "stop" ] || [ "$1" = "restart" ]; then
+ ERRMSG=$(pg_ctlcluster --force "$2" "$name" $1 2>&1)
+ else
+ ERRMSG=$(pg_ctlcluster "$2" "$name" $1 2>&1)
+ fi
+ 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
+}
+
+# create /var/run/postgresql
+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
+ [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
+ fi
+}
+
+# start all clusters of version $1
+# output according to Debian Policy for init scripts
+start() {
+ 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() {
+ CLUSTERS=`pg_lsclusters -h | grep "^$1[[:space:]]"`
+ # no clusters -> unknown status
+ [ -n "$CLUSTERS" ] || exit 4
+ echo "$CLUSTERS" | awk 'BEGIN {rc=0; printf("Running clusters: ")} {if (match($4, "online")) printf ("%s/%s ", $1, $2); else rc=3} END { printf("\n"); exit rc }'
+}
+
+# return all installed versions which do not have their own init script
+get_versions() {
+ versions=''
+ local v dir skipinit
+
+ skipinit=continue
+ #redhat# skipinit=true # RedHat systems will have /etc/init.d/postgresql-* provided by the yum.pg.o package
+ dir=$PGBINROOT
+ #redhat# dir="-d /usr/pgsql-*"
+
+ for v in `ls $dir 2>/dev/null`; do
+ #redhat# v=${v#*-}
+ [ -x /etc/init.d/postgresql-$v ] && $skipinit
+ if [ -x $PGBINROOT$v/bin/pg_ctl ]; then
+ versions="$versions $v"
+ fi
+ done
+}