5 kx #!/bin/bash
5 kx
5 kx # PostgreSQL startup script for Radix Linux
5 kx #
5 kx # $Revision: 6804ca7db709 $
5 kx # $Date: 2015/03/13 21:57:14 $
5 kx #
5 kx # Copyright 2007-2015 Adis Nezirovic <adis_at_linux.org.ba>
5 kx # All rights reserved.
5 kx #
5 kx # Redistribution and use of this script, with or without modification, is
5 kx # permitted provided that the following conditions are met:
5 kx #
5 kx # 1. Redistributions of this script must retain the above copyright
5 kx # notice, this list of conditions and the following disclaimer.
5 kx #
5 kx # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
5 kx # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
5 kx # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
5 kx # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5 kx # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
5 kx # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
5 kx # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
5 kx # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
5 kx # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
5 kx # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5 kx
5 kx # Do not source this script (since it contains exit() calls)
5 kx #
5 kx # Since version 9.3 this startup script can run multiple PostgreSQL
5 kx # versions on different ports and with different data dirs.
5 kx #
5 kx # e.g. PG_VERSION=14.1 PG_PORT=6432 /etc/rc.d/rc.@PKGNAME@ start
5 kx
5 kx PG_VERSION=${PG_VERSION:-@PG_VERSION@}
5 kx PG_PORT=${PG_PORT:-@PG_PORT@}
5 kx LIBDIRSUFFIX="@LIBDIRSUFFIX@"
5 kx LOGFILE=/var/log/@PKGNAME@-$PG_VERSION
5 kx DATADIR=/var/lib/pgsql/$PG_VERSION/data
5 kx RUNDIR=/var/run/pgsql
5 kx POSTGRES=/usr/lib${LIBDIRSUFFIX}/@PKGNAME@/$PG_VERSION/bin/postgres
5 kx PG_CTL=/usr/lib${LIBDIRSUFFIX}/@PKGNAME@/$PG_VERSION/bin/pg_ctl
5 kx PIDFILE=$DATADIR/postmaster.pid
5 kx
5 kx # oom-killer score
5 kx #
5 kx # https://www.postgresql.org/docs/14/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT
5 kx PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
5 kx PG_MASTER_OOM_SCORE_ADJ=-1000
5 kx PG_CHILD_OOM_SCORE_ADJ=0
5 kx PG_ENV="PG_OOM_ADJUST_FILE=$PG_OOM_ADJUST_FILE PG_OOM_ADJUST_VALUE=$PG_CHILD_OOM_SCORE_ADJ"
5 kx
5 kx # Return values (according to LSB):
5 kx # 0 - success
5 kx # 1 - generic or unspecified error
5 kx # 2 - invalid or excess argument(s)
5 kx # 3 - unimplemented feature (e.g. "reload")
5 kx # 4 - insufficient privilege
5 kx # 5 - program is not installed
5 kx # 6 - program is not configured
5 kx # 7 - program is not running
5 kx
5 kx pg_ctl()
5 kx {
5 kx CMD="$PG_CTL -o '-p $PG_PORT' $@"
5 kx su - postgres -c "$CMD"
5 kx }
5 kx
5 kx if [ ! -f $POSTGRES ]; then
5 kx echo "Could not find 'postgres' binary. Maybe PostgreSQL is not installed properly?"
5 kx exit 5
5 kx fi
5 kx
5 kx case "$1" in
5 kx
5 kx "start")
5 kx echo "Starting PostgreSQL"
5 kx touch $LOGFILE
5 kx chown postgres:wheel $LOGFILE
5 kx chmod 0640 $LOGFILE
5 kx mkdir -p $RUNDIR
5 kx chown -R postgres:postgres $RUNDIR
5 kx
5 kx if [ ! -e $DATADIR/PG_VERSION ]; then
5 kx echo "You should initialize the PostgreSQL database at location $DATADIR"
5 kx echo "e.g. su postgres -c \"initdb -D $DATADIR --locale=en_US.UTF-8 -A md5 -W\""
5 kx exit 6
5 kx fi
5 kx
5 kx if [ $(pgrep -f $POSTGRES) ]; then
5 kx
5 kx echo "PostgreSQL daemon already running"
5 kx if [ ! -f $PIDFILE ]; then
5 kx echo "Warning: Missing pid file $PIDFILE"
5 kx fi
5 kx exit 1
5 kx
5 kx else
5 kx test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE"
5 kx pg_ctl start -w -l $LOGFILE -D $DATADIR
5 kx exit 0
5 kx fi
5 kx ;;
5 kx
5 kx "stop")
5 kx echo "Shutting down PostgreSQL..."
5 kx pg_ctl stop -l $LOGFILE -D $DATADIR -m smart
5 kx ;;
5 kx
5 kx "force-stop")
5 kx # Take care! This will kill _all_ client connections
5 kx # and rollback current transactions.
5 kx echo "Shutting down PostgreSQL (fast)..."
5 kx pg_ctl stop -l $LOGFILE -D $DATADIR -m fast
5 kx ;;
5 kx
5 kx "unclean-stop")
5 kx # Take care! This will abort server process itself
5 kx # resulting with database recovery on next start.
5 kx echo "Shutting down PostgreSQL (immediate)..."
5 kx pg_ctl stop -l $LOGFILE -D $DATADIR -m immediate
5 kx ;;
5 kx
5 kx "restart")
5 kx echo "Restarting PostgreSQL..."
5 kx test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE"
5 kx pg_ctl restart -l $LOGFILE -D $DATADIR -m smart
5 kx ;;
5 kx
5 kx "force-restart")
5 kx # Take care! This will kill _all_ client connections
5 kx # and rollback current transactions.
5 kx echo "Restarting PostgreSQL (fast)..."
5 kx pg_ctl restart -l $LOGFILE -D $DATADIR -m fast
5 kx ;;
5 kx
5 kx "unclean-restart")
5 kx # Take care: This will abort server process itself
5 kx # resulting with database recovery on start.
5 kx echo "Restarting PostgreSQL (immediate)..."
5 kx pg_ctl restart -l $LOGFILE -D $DATADIR -m immediate
5 kx ;;
5 kx
5 kx "reload")
5 kx echo "Reloading configuration for PostgreSQL..."
5 kx pg_ctl reload -l $LOGFILE -D $DATADIR -m smart
5 kx ;;
5 kx
5 kx "status")
5 kx if [ $(pgrep -f $POSTGRES) ]; then
5 kx echo "PostgreSQL is running"
5 kx
5 kx if [ ! -e $PIDFILE ]; then
5 kx echo "Warning: Missing pid file $PIDFILE"
5 kx fi
5 kx
5 kx exit 0
5 kx else
5 kx echo "PostgreSQL is stopped"
5 kx
5 kx if [ -e $PIDFILE ]; then
5 kx echo "Detected stale pid file $PIDFILE"
5 kx fi
5 kx
5 kx exit 0
5 kx fi
5 kx ;;
5 kx
5 kx *)
5 kx # unclean-stop and unclean-restart are not documented on purpose.
5 kx echo "Usage: $0 {start|stop|force-stop|status|restart|force-restart|reload}"
5 kx exit 1
5 kx ;;
5 kx esac