mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Adjust postmaster to recognize that a lockfile containing its parent's PID
must be stale. Tweak example startup scripts to not use pg_ctl but launch the postmaster directly, thereby ensuring that only the postmaster's direct parent shell will be a postgres-owned process. In combination these should fix the longstanding problem of the postmaster sometimes refusing to start during reboot because it thinks the old lockfile is not stale.
This commit is contained in:
@ -48,7 +48,7 @@ prefix="/usr/local/pgsql"
|
||||
# Data directory
|
||||
PGDATA="/usr/local/pgsql/data"
|
||||
|
||||
# Who to run pg_ctl as, should be "postgres".
|
||||
# Who to run the postmaster as, usually "postgres". (NOT "root")
|
||||
PGUSER="postgres"
|
||||
|
||||
# the logfile path and name (NEEDS to be writeable by PGUSER)
|
||||
@ -68,8 +68,13 @@ ROTATESEC="604800"
|
||||
# The path that is to be used for the script
|
||||
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
||||
|
||||
# What to use to start up the postmaster
|
||||
DAEMON="$prefix/bin/pg_ctl"
|
||||
# What to use to start up the postmaster (we do NOT use pg_ctl for this,
|
||||
# as it adds no value and can cause the postmaster to misrecognize a stale
|
||||
# lock file)
|
||||
DAEMON="$prefix/bin/postmaster"
|
||||
|
||||
# What to use to shut down the postmaster
|
||||
PGCTL="$prefix/bin/pg_ctl"
|
||||
|
||||
# The apache log rotation utility
|
||||
LOGUTIL="/usr/sbin/rotatelogs"
|
||||
@ -80,27 +85,28 @@ StartService () {
|
||||
if [ "${POSTGRESQLSERVER:=-NO-}" = "-YES-" ]; then
|
||||
ConsoleMessage "Starting PostgreSQL database server"
|
||||
if [ "${ROTATELOGS}" = "1" ]; then
|
||||
sudo -u $PGUSER sh -c "${DAEMON} start -D ${PGDATA} -s | ${LOGUTIL} ${PGLOG} ${ROTATESEC} &"
|
||||
sudo -u $PGUSER sh -c "${DAEMON} -D '${PGDATA}' | ${LOGUTIL} '${PGLOG}' ${ROTATESEC} &"
|
||||
else
|
||||
sudo -u $PGUSER $DAEMON start -D "$PGDATA" -s -l $PGLOG
|
||||
sudo -u $PGUSER sh -c "${DAEMON} -D '${PGDATA}' &" >>$PGLOG 2>&1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
StopService () {
|
||||
ConsoleMessage "Stopping PostgreSQL database server"
|
||||
sudo -u $PGUSER $DAEMON stop -D "$PGDATA" -s -m fast
|
||||
sudo -u $PGUSER $PGCTL stop -D "$PGDATA" -s -m fast
|
||||
}
|
||||
|
||||
RestartService () {
|
||||
if [ "${POSTGRESQLSERVER:=-NO-}" = "-YES-" ]; then
|
||||
ConsoleMessage "Restarting PostgreSQL database server"
|
||||
# should match StopService:
|
||||
sudo -u $PGUSER $PGCTL stop -D "$PGDATA" -s -m fast
|
||||
# should match StartService:
|
||||
if [ "${ROTATELOGS}" = "1" ]; then
|
||||
# StopService
|
||||
# StartService
|
||||
sudo -u $PGUSER sh -c "${DAEMON} restart -D ${PGDATA} -s -m fast | ${LOGUTIL} ${PGLOG} ${ROTATESEC} &"
|
||||
sudo -u $PGUSER sh -c "${DAEMON} -D '${PGDATA}' | ${LOGUTIL} '${PGLOG}' ${ROTATESEC} &"
|
||||
else
|
||||
sudo -u $PGUSER $DAEMON restart -D "$PGDATA" -s -m fast
|
||||
sudo -u $PGUSER sh -c "${DAEMON} -D '${PGDATA}' &" >>$PGLOG 2>&1
|
||||
fi
|
||||
else
|
||||
StopService
|
||||
|
Reference in New Issue
Block a user