Configure the /etc/rc.d/init.d/postgresql script file

Securing and Optimizing Linux: RedHat Edition -A Hands on Guide
Prev | Chapter 27. Linux PostgreSQL Database Server | Next

# 27.5. Configure the `/etc/rc.d/init.d/postgresql` script file

To start and stop PostgreSQL Server, create the `postgresql` script file, touch `/etc/rc.d/init.d/postgresql` and add:

                   #! /bin/sh
                   # postgresql    This is the init script for starting up the PostgreSQL
                   #               server

                   # chkconfig: 345 85 15
                   # description: Starts and stops the PostgreSQL backend daemon that handles \
                   #              all database requests.
                   # processname: postmaster
                   # pidfile: /var/run/postmaster.pid
                   #

                   # Source function library.
                   . /etc/rc.d/init.d/functions

                   # Get config.
                   . /etc/sysconfig/network

                   # Check that networking is up.
                   # Pretty much need it for postmaster.
                   [ ${NETWORKING} = "no" ] && exit 0

                   [ -f /usr/bin/postmaster ] || exit 0

                   # This script is slightly unusual in that the name of the daemon (postmaster)
                   # is not the same as the name of the subsystem (postgresql)

                   # See how we were called.
                   case "$1" in
                   start)
                   echo -n "Checking postgresql installation: "
                   # Check for the PGDATA structure
                   if [ -f /var/lib/pgsql/PG_VERSION ] && [ -d /var/lib/pgsql/base/template1 ]
                   then
                   # Check version of existing PGDATA

                   if [ `cat /var/lib/pgsql/PG_VERSION` != '6.5' ]
                   then
                   echo "old version. Need to Upgrade."
                   echo "See /usr/doc/postgresql-6.5.2/README.rpm for more information."
                   exit 1
                   else
                   echo "looks good!"
                   fi

                   # No existing PGDATA! Initdb it.

                   else
                   echo "no database files found."
                   if [ ! -d /var/lib/pgsql ]
                   then
                   mkdir -p /var/lib/pgsql
                   chown postgres.postgres /var/lib/pgsql
                   fi
                   su -l postgres -c '/usr/bin/initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql'
                   fi

                   # Check for postmaster already running...
                   pid=`pidof postmaster`
                   if [ $pid ]
                   then
                   echo "Postmaster already running."
                   else
                   #all systems go -- remove any stale lock files
                   rm -f /tmp/.s.PGSQL.* > /dev/null
                   echo -n "Starting postgresql service: "
                   su -l postgres -c '/usr/bin/postmaster -i -S -D/var/lib/pgsql'
                   sleep 1
                   pid=`pidof postmaster`
                   if [ $pid ]
                   then
                   echo -n "postmaster [$pid]"
                   touch /var/lock/subsys/postgresql
                   echo $pid > /var/run/postmaster.pid
                   echo
                   else
                   echo "failed."
                   fi
                   fi
                   ;;
                   stop)
                   echo -n "Stopping postgresql service: "
                   killproc postmaster
                   sleep 2
                   rm -f /var/run/postmaster.pid
                   rm -f /var/lock/subsys/postgresql
                   echo
                   ;;
                   status)
                   status postmaster
                   ;;
                   restart)
                   $0 stop
                   $0 start
                   ;;
                   *)
                   echo "Usage: postgresql {start|stop|status|restart}"
                   exit 1
                   esac

                   exit 0

Now, make this script executable and change its default permissions:

                     [root@deep] /# chmod 700  /etc/rc.d/init.d/postgresql

Create the symbolic rc.d links for PostgreSQL with the command:

                     [root@deep] /# chkconfig --add postgresql

Start your new PostgreSQL server manually with the following command:

                         [root@deep] /# /etc/rc.d/init.d/postgresql start

                         Checking postgresql installation: looks good!
                         Starting postgresql service: postmaster [22401]

Prev | Home | Next
Configuration files | Up | Commands often used