mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2026-02-22 16:22:24 +01:00
The pid file contains a lot of numeric stuff. The first line is the PID, so use just 'read' to get it instead of the grep.
140 lines
3.8 KiB
Plaintext
140 lines
3.8 KiB
Plaintext
#!/sbin/runscript
|
|
# Copyright 1999-2008 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/files/postgresql.init-8.3,v 1.4 2008/09/28 22:53:02 caleb Exp $
|
|
# Modifications to support Alpine Linux pg-restore
|
|
|
|
opts="${opts} reload setup"
|
|
|
|
depend() {
|
|
use net
|
|
after firewall
|
|
}
|
|
|
|
checkconfig() {
|
|
[ -d "$PGDATA/base" ] && return 0
|
|
echo "checking config"
|
|
|
|
if [ -z "$AUTO_SETUP" ] ; then
|
|
eerror "Database not found at: $PGDATA"
|
|
eerror "Please make sure that PGDATA points to the right path."
|
|
eerror "You can run '/etc/init.d/postgresql setup' to setup a new database cluster."
|
|
return 1
|
|
fi
|
|
setup
|
|
}
|
|
|
|
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}\" /usr/bin/pg_ctl start ${WAIT_FOR_START} -o '--silent-mode=true ${PGOPTS}'" >/dev/null
|
|
retval=$?
|
|
[ $retval -ne 0 ] && eend $retval && return $retval
|
|
|
|
# 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 false 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
|
|
read pid < "$PGDATA/postmaster.pid"
|
|
test -d /proc/"${pid}"
|
|
eend $?
|
|
}
|
|
|
|
stop() {
|
|
ebegin "Stopping PostgreSQL (this can take up to $(( ${WAIT_FOR_DISCONNECT} + ${WAIT_FOR_CLEANUP} )) seconds)"
|
|
|
|
local retval
|
|
|
|
su -l ${PGUSER} \
|
|
-c "env PGDATA=\"${PGDATA}\" /usr/bin/pg_ctl stop -t ${WAIT_FOR_DISCONNECT} -m smart" >/dev/null
|
|
|
|
retval=$?
|
|
[ $retval -eq 0 ] && eend $retval && return $retval
|
|
|
|
ewarn "Some clients did not disconnect within ${WAIT_FOR_DISCONNECT} seconds."
|
|
ewarn "Going to shutdown the server anyway."
|
|
|
|
su -l ${PGUSER} \
|
|
-c "env PGDATA=\"${PGDATA}\" /usr/bin/pg_ctl stop -m fast" >/dev/null
|
|
|
|
retval=$?
|
|
[ $retval -eq 0 ] && eend $retval && return $retval
|
|
|
|
if [ ${WAIT_FOR_QUIT} -eq 0 ] ; then
|
|
eerror "Server did not shut down and sending the SIGQUIT has been disabled."
|
|
eend $retval
|
|
return $retval
|
|
fi
|
|
|
|
ewarn "Shutting down the server gracefully failed."
|
|
ewarn "Forcing it to shutdown which leads to a recover-run on next startup."
|
|
|
|
su -l ${PGUSER} \
|
|
-c "env PGDATA=\"${PGDATA}\" /usr/bin/pg_ctl stop -m immediate" >/dev/null
|
|
|
|
retval=$?
|
|
[ $retval -eq 0 ] && eend $retval && return $retval
|
|
|
|
eerror "Forced shutdown failed!!! Something is wrong with your system, please take care of it manually."
|
|
eend $?
|
|
}
|
|
|
|
reload() {
|
|
ebegin "Reloading PostgreSQL configuration"
|
|
su -l ${PGUSER} \
|
|
-c "env PGDATA=\"${PGDATA}\" /usr/bin/pg_ctl reload" >/dev/null
|
|
eend $?
|
|
}
|
|
|
|
setup() {
|
|
ebegin "Creating a new PostgreSQL database cluster"
|
|
|
|
if [ -d "${PGDATA}/base" ] ; then
|
|
eend 1 "${PGDATA}/base already exists"
|
|
return
|
|
fi
|
|
|
|
mkdir -p "${PGDATA}" 2>/dev/null
|
|
|
|
# If the pg_hba.conf and friends exist, move them
|
|
local tmpdir="$( dirname "$PGDATA" )/tmp"
|
|
mkdir -p "${tmpdir}" >/dev/null
|
|
echo mv "${PGDATA}"/* "${tmpdir}"
|
|
mv "${PGDATA}"/* "${tmpdir}" 2>/dev/null
|
|
|
|
rm -rf "${PGDATA}"/* 2>/dev/null
|
|
chown -Rf postgres:postgres "${PGDATA}"
|
|
chmod 0700 "${PGDATA}"
|
|
cd "${PGDATA}" # to avoid the: could not change directory to "/root"
|
|
su -c "/usr/bin/initdb --pgdata ${PGDATA}" postgres
|
|
einfo "You can use the '/etc/init.d/postgresql' script to run PostgreSQL instead"
|
|
einfo "of 'pg_ctl'."
|
|
local res=$?
|
|
|
|
# move the pg_hba.conf and friends
|
|
mv $tmpdir/* "$PGDATA" 2>/dev/null
|
|
rm -rf $tmpdir 2>/dev/null
|
|
|
|
# Do not send a SIGHUP to postmaster; its not necessary for a new database
|
|
# and allows pg-restore to do a blind restore of an old database
|
|
|
|
eend $res
|
|
}
|
|
|