Created
April 30, 2012 16:37
-
-
Save immunda/2559909 to your computer and use it in GitHub Desktop.
Postgres init script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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/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 | |
} | |
# 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() { | |
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 ($4 == "online") printf ("%s/%s ", $1, $2); else rc=3} END { printf("\n"); exit rc }' | |
} | |
phil@zoot:/usr/share/postgresql-common$ ^C | |
phil@zoot:/usr/share/postgresql-common$ | |
phil@zoot:/usr/share/postgresql-common$ cat init.d-functions | |
# 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/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 | |
} | |
# 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() { | |
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 ($4 == "online") printf ("%s/%s ", $1, $2); else rc=3} END { printf("\n"); exit rc }' | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment