mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
c8196c87a7
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.
104 lines
2.5 KiB
Bash
104 lines
2.5 KiB
Bash
#! /bin/sh
|
|
|
|
# chkconfig: 2345 98 02
|
|
# description: PostgreSQL RDBMS
|
|
|
|
# This is an example of a start/stop script for SysV-style init, such
|
|
# as is used on Linux systems. You should edit some of the variables
|
|
# and maybe the 'echo' commands.
|
|
#
|
|
# Place this file at /etc/init.d/postgresql (or
|
|
# /etc/rc.d/init.d/postgresql) and make symlinks to
|
|
# /etc/rc.d/rc0.d/K02postgresql
|
|
# /etc/rc.d/rc1.d/K02postgresql
|
|
# /etc/rc.d/rc2.d/K02postgresql
|
|
# /etc/rc.d/rc3.d/S98postgresql
|
|
# /etc/rc.d/rc4.d/S98postgresql
|
|
# /etc/rc.d/rc5.d/S98postgresql
|
|
# Or, if you have chkconfig, simply:
|
|
# chkconfig --add postgresql
|
|
#
|
|
# Proper init scripts on Linux systems normally require setting lock
|
|
# and pid files under /var/run as well as reacting to network
|
|
# settings, so you should treat this with care.
|
|
|
|
# Original author: Ryan Kirkpatrick <pgsql@rkirkpat.net>
|
|
|
|
# $PostgreSQL: pgsql/contrib/start-scripts/linux,v 1.7 2004/10/01 18:30:21 tgl Exp $
|
|
|
|
## EDIT FROM HERE
|
|
|
|
# Installation prefix
|
|
prefix=/usr/local/pgsql
|
|
|
|
# Data directory
|
|
PGDATA="/usr/local/pgsql/data"
|
|
|
|
# Who to run the postmaster as, usually "postgres". (NOT "root")
|
|
PGUSER=postgres
|
|
|
|
# Where to keep a log file
|
|
PGLOG="$PGDATA/serverlog"
|
|
|
|
## STOP EDITING HERE
|
|
|
|
# Check for echo -n vs echo \c
|
|
if echo '\c' | grep -s c >/dev/null 2>&1 ; then
|
|
ECHO_N="echo -n"
|
|
ECHO_C=""
|
|
else
|
|
ECHO_N="echo"
|
|
ECHO_C='\c'
|
|
fi
|
|
|
|
# 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 (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"
|
|
|
|
set -e
|
|
|
|
# Only start if we can find the postmaster.
|
|
test -x $DAEMON || exit 0
|
|
|
|
# Parse command line parameters.
|
|
case $1 in
|
|
start)
|
|
$ECHO_N "Starting PostgreSQL: "$ECHO_C
|
|
su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
|
|
echo "ok"
|
|
;;
|
|
stop)
|
|
echo -n "Stopping PostgreSQL: "
|
|
su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast"
|
|
echo "ok"
|
|
;;
|
|
restart)
|
|
echo -n "Restarting PostgreSQL: "
|
|
su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast -w"
|
|
su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
|
|
echo "ok"
|
|
;;
|
|
reload)
|
|
echo -n "Reload PostgreSQL: "
|
|
su - $PGUSER -c "$PGCTL reload -D '$PGDATA' -s"
|
|
echo "ok"
|
|
;;
|
|
status)
|
|
su - $PGUSER -c "$PGCTL status -D '$PGDATA'"
|
|
;;
|
|
*)
|
|
# Print help
|
|
echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|