Re: Postmaster failing to start on reboot - Mailing list pgsql-general

From surabhi.ahuja
Subject Re: Postmaster failing to start on reboot
Date
Msg-id 967CFC4343BF2A4DAFACD026D33DC85118EC88@jal.iiitb.ac.in
Whole thread Raw
In response to Postmaster failing to start on reboot  ("surabhi.ahuja" <surabhi.ahuja@iiitb.ac.in>)
Responses Re: Postmaster failing to start on reboot
List pgsql-general
i am using PostgreSQL 8.0.0
and the statrtup script i am using is as follows:
 
 
*****
#! /bin/sh
# dbxd    Script for starting up the PostgreSQL
#               server in the daemon mode
#
#

# postgreSQL version is:
PGVERSION=8.0
# Name of the script
NAME=dbxd
# Command issued start/stop/restart
action="$1"
# Get SDC configiration
#   . $SDCHOME/.SdCrc
# Set defaults for port and database directory
POSTGRES_LOG="$SDCHOME/nuevo/logfiles/postgreslog"
if [ "`uname`" = "Linux" ]; then
   #DEVMACHINE=`file /export/dbsroot | grep -c directory`
   POSTMASTER=/usr/bin/postmaster
   PGCTL="/usr/bin/pg_ctl -w "
   INITDB=/usr/bin/initdb
   PGDATA=$SdC_IMAGE_POOL/dbx
   PGPORT=5432
else
   echo "Cannot launch POSTGRES , unknown OS"
   echo " [ FAILED ]"
   exit 1
fi
if [ "`uname`" = "Linux" ]; then
   INITD=/etc/rc.d/init.d
   . $INITD/functions
   # Get config.
   . /etc/sysconfig/network
fi
# Check that networking is up.
# Pretty much need it for postmaster.
if [ "`uname`" = "Linux" ]; then
   [ "${NETWORKING}" = "no" ] && exit 0
fi
start(){
        # Check for the PGDATA structure
        if [ -f $PGDATA/PG_VERSION ] && [ -d $PGDATA/base ]
        then
        # Check version of existing PGDATA
                INSTPG_VERSION=`cat $PGDATA/PG_VERSION`
                if [ $INSTPG_VERSION != '8.0' -a $INSTPG_VERSION != '8.1' ]
                then
                        echo "An old version of the database format was found.\n"
                        exit 1
                fi
        else
        # No existing PGDATA - call initdb
                echo "Initializing database: "
                #chmod 755 /var/lib/pgsql
                if [ ! -d $PGDATA ]
                then
                        mkdir -p $PGDATA
                fi
                chown $SDCUSER:$SDCUSER $PGDATA
                chmod go-rwx $PGDATA
                # Make sure the locale from the initdb is preserved for later startups...
                [ -f /etc/sysconfig/i18n ] && cp /etc/sysconfig/i18n $PGDATA/../initdb.i18n
                # Just in case no locale was set, use en_US on Linux
                if [ "`uname`" = "Linux" ]; then
                        [ ! -f /etc/sysconfig/i18n ] && echo "LANG=en_US" > $PGDATA/../initdb.i18n
                fi
                # Initialize the database
                if [ "`uname`" = "Linux" ]; then
                        /bin/sh -c "$INITDB --pgdata=$PGDATA > /dev/null 2>&1" < /dev/null
                fi
                # Modify original postgres settings so that local connection are trusted
                mv $PGDATA/pg_hba.conf $PGDATA/pg_hba.conf.orig
                cat $PGDATA/pg_hba.conf.orig | sed "s/^local.*/local   all    all    trust/" > $PGDATA/pg_hba.conf
                chown $SDCUSER:$SDCUSER $PGDATA/pg_hba.conf
                chmod 600 $PGDATA/pg_hba.conf
                rm $PGDATA/pg_hba.conf.orig
                #Copy the configuration file to the database - TBD
                #cp /export/home/sdc/database_scripts/config/postgresql.conf $PGDATA/
                #chown postgres:postgres $PGDATA/postgresql.conf
                #chmod 600 $PGDATA/postgresql.conf
        fi
        # Check for postmaster already running...
        # note that pg_ctl only looks at the data structures in PGDATA
        # you really do need the pidof()
        if [ "`uname`" = "Linux" ]; then
           pid=`pidof -s postmaster`
        else
           pid=`ps -eaf | grep postmaster | grep -v grep | tail -1 | awk '{print $2}'`
        fi
        if [ $pid ] && $PGCTL status -D $PGDATA > /dev/null 2>&1
        then
                echo "Postmaster already running."
        else
                if [ "`uname`" = "Linux" ]; then
                   #su -l postgres -s /bin/sh -c "$PGCTL -l $POSTGRES_LOG -D $PGDATA -p $POSTMASTER -o '-p ${PGPORT}' start
 > /dev/null 2>&1" < /dev/null
                   rm -f /tmp/.s.PGSQL.${PGPORT} > /dev/null
                   rm -f /tmp/.s.PGSQL.${PGPORT}.lock > /dev/null
                   /bin/sh -c "$PGCTL -l $POSTGRES_LOG -D $PGDATA -p $POSTMASTER -o '-p ${PGPORT}' start  > /dev/null 2>&1"
< /dev/null
               
fi
                sleep 1
                if [ "`uname`" = "Linux" ]; then
                   pid=`pidof -s postmaster`
                else
                   pid=`ps -eaf | grep postmaster | grep -v grep | tail -1 | awk '{print $2}'`
                fi
                if [ $pid ]
                then
                        #echo "success $PSQL_START"
                        echo_success
                else
                        #echo "failure $PSQL_START"
                        echo_failure
                fi
        fi
}
stop(){
        echo "Stopping ${NAME} service: "
        if [ "`uname`" = "Linux" ]; then
           #su -l postgres -s /bin/sh -c "$PGCTL stop -D $PGDATA -s -m fast" > /dev/null 2>&1
           /bin/sh -c "$PGCTL stop -D $PGDATA -s -m fast" > /dev/null 2>&1
        fi
       ret=$?
        if [ $ret -eq 0 ]
        then
                #echo "success"
                echo_success
        else
                echo_failure
                if [ "`uname`" = "Linux" ]; then
                   #su -l postgres -s /bin/sh -c "$PGCTL stop -D $PGDATA -s -m immediate" > /dev/null 2>&1
                   /bin/sh -c "$PGCTL stop -D $PGDATA -s -m immediate" > /dev/null 2>&1
                fi
        fi
        echo
}
case $action in
  start)
        start
        ;;
  stop)
        stop
        ;;
  *)
        echo "Usage: $0 {start|stop|status|restart|condrestart|reload|force-reload}"
        exit 1
esac
exit 0
*****
 
for starting postmaster i run dbxd start
and for shutting it down i run dbxd stop.
 
Can you please study it once and suggest if I have missed something.
 
Please see the highlighted section (in red) . do i also need to remove the pid file also . i mean with the other rm commands do i need to give rm -f $PGDATA /postmaster.pid also?
 
Thank You,
Regards
Surabhi


From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: Wed 11/9/2005 9:23 PM
To: Richard Huxton
Cc: surabhi.ahuja; pgsql-general@postgresql.org
Subject: Re: [GENERAL] Postmaster failing to start on reboot

***********************
Your mail has been scanned by InterScan VirusWall.
***********-***********


Richard Huxton <dev@archonet.com> writes:
> surabhi.ahuja wrote:
>> So,  I try starting postmaster. and it displays the following error
>> message: HINT:  If you're sure there are no old server processes
>> still running, remove the shared memory block with the command "ipcr
>> m", or just delete the file
>> "/export/home1/sdc_image_pool/dbx/postmaster.pid".
>>
>> does it means that i will have to delete the postmaster.pid file ..in
>> such a scenarion always?

> No, only when it doesn't close down properly. Check your system logs to
> see what happened.

Also, what PG version is this exactly?  More recent versions have better
defenses against being fooled by stale postmaster.pid files.  It matters
what postmaster startup script you're using, too.

                        regards, tom lane


pgsql-general by date:

Previous
From: Maik Trömel
Date:
Subject: script
Next
From: "surabhi.ahuja"
Date:
Subject: Re: Postmaster failing to start on reboot