gentoo-overlay/dev-db/postgresql-server/files/postgresql.init-8.1-r1

136 lines
3.6 KiB
Text

#!/sbin/runscript
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/files/Attic/postgresql.init-8.1-r1,v 1.2 2010/07/11 11:53:55 patrick Exp $
opts="${opts} reload"
depend() {
use net
if [ -L /etc/eselect/postgresql/service ] ; then
local p_service="$(for f in /etc/eselect/postgresql/service/* ; do . $f ; done ; echo $postgres_service )"
test "${p_service}" = "${SVCNAME}" && provide postgresql
fi
}
checkconfig() {
if [ ! -d "$PGDATA" ] ; then
eerror "Directory not found: $PGDATA"
eerror "Please make sure that PGDATA points to the right path."
eerror "You can run 'emerge postgresql-server --config' to setup a new database cluster."
return 1
fi
}
start() {
checkconfig || return 1
ebegin "Starting PostgreSQL"
if [ -f "$PGDATA/postmaster.pid" ] ; then
rm -f "$PGDATA/postmaster.pid"
fi
local retval
su -l ${PGUSER} \
-c "env PGDATA=\"${PGDATA}\" PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} /usr/lib/postgresql-8.1/bin/pg_ctl start ${WAIT_FOR_START} -s -o '--silent-mode=true ${PGOPTS}'"
retval=$?
if [[ $retval != 0 ]] ; then
eend $retval
return $retval
fi
# The following is to catch the case of an already running server
# in which pg_ctl doesn't know to which server it connected to and
# falsely reports the server as 'up'
sleep 2
if [ ! -f "$PGDATA/postmaster.pid" ] ; then
eerror "The PID file doesn't exist but pg_ctl reported a running server."
eerror "Please check whether there is another server running on the same port or read the log-file."
eend 1
return 1
fi
local pid=$(grep "^[0-9]\+" "$PGDATA/postmaster.pid")
ps -p "${pid}" &> /dev/null
eend $?
}
stop() {
ebegin "Stopping PostgreSQL (this can take a few minutes)"
local retval
if [[ "${NICE_QUIT}" != "NO" ]] ; then
su -l ${PGUSER} \
-c "env PGDATA=\"${PGDATA}\" PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} /usr/lib/postgresql-8.1/bin/pg_ctl stop ${WAIT_FOR_STOP} -s -m smart"
retval=$?
if [[ $retval == 0 ]] ; then
eend $retval
return $retval
fi
ewarn "Shutting down the server gracefully failed."
ewarn "Probably because some clients did not disconnect within 60 seconds."
else
ewarn "NICE_QUIT disabled."
ewarn "You really should have it enabled."
fi
if [[ "${RUDE_QUIT}" != "NO" ]] ; then
ewarn "RUDE_QUIT enabled."
ewarn "Going to shutdown the server anyway."
su -l ${PGUSER} \
-c "env PGDATA=\"${PGDATA}\" PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} /usr/lib/postgresql-8.1/bin/pg_ctl stop ${WAIT_FOR_STOP} -s -m fast"
retval=$?
if [[ $retval == 0 ]] ; then
eend $retval
return $retval
fi
eerror "Failed to shutdown server."
else
ewarn "RUDE_QUIT disabled."
fi
if [[ "${FORCE_QUIT}" == "YES" ]] ; then
ewarn "FORCE_QUIT enabled."
ewarn "Forcing server to shutdown."
ewarn "A recover-run will be executed on the next startup."
su -l ${PGUSER} \
-c "env PGDATA=\"${PGDATA}\" PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} /usr/lib/postgresql-8.1/bin/pg_ctl stop ${WAIT_FOR_STOP} -s -m immediate"
retval=$?
if [[ $retval == 0 ]] ; then
ewarn "Server forced down."
eend $retval
return $retval
fi
eerror "Forced shutdown failed!!!"
eerror "Something is wrong with your system."
eerror "Please take care of it manually."
eerror "Unable to stop server."
eend $retval
return $retval
else
ewarn "FORCE_QUIT disabled."
eerror "Unable to shutdown server."
eend 1
return 1
fi
}
reload() {
ebegin "Reloading PostgreSQL configuration"
su -l ${PGUSER} \
-c "env PGDATA=\"${PGDATA}\" PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} /usr/lib/postgresql-8.1/bin/pg_ctl reload -s"
eend $?
}