Thread

  1. Failing to boot Postgres on Red Hat Linux

    Matthew Green <matthewgreen@intelfax.co.uk> — 2000-08-31T16:00:28Z

    Hello,
    
    Postmaster is not initializing when our Red Hat server is rebooting.
    We have followed what is stated in the manual with a slight modification to allow TCPIP connections.
    
    i.e.
    in the file /etc/inittab
    
    -----------------------------<SNIP>---------------------------------------------
    #   Run Postgres in standard runlevels
    
    pg:2345:respawn:/bin/su - postgres -c "/usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data >> /usr/local/pgsql/logs/server.log 2>&1 </dev/null"
    -----------------------------<EOF>---------------------------------------------
    
    This seems to execute since if we introduce a deliberate error we get a warning on reboot.
    But with the line exactly as above we get no warnings, no server.log file is generated and the postmaster task is not visible if we run "ps -A" as root.
    
    Any help would be gratefully received including alternative methods of forcing Postgres to initialize on reboot.
    
    Many Thanks,
    
    Matthew Green
    
    
    
    Intelfax Limited,
    Lincoln House, 
    75 Westminster Bridge Road, 
    London SE1 7HS
    
    020 7902 5157
    
    
    
  2. Re: Failing to boot Postgres on Red Hat Linux

    Thomas Good <tomg@q8.nrnet.org> — 2000-08-31T16:25:37Z

    On Thu, 31 Aug 2000, Matthew Green wrote:
    
    > Hello,
    > 
    > Postmaster is not initializing when our Red Hat server is rebooting.
    > We have followed what is stated in the manual with a slight modification to allow TCPIP connections.
    > 
    > i.e.
    > in the file /etc/inittab
    > 
    > -----------------------------<SNIP>---------------------------------------------
    > #   Run Postgres in standard runlevels
    > 
    > pg:2345:respawn:/bin/su - postgres -c "/usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data >> /usr/local/pgsql/logs/server.log 2>&1 </dev/null"
    > -----------------------------<EOF>---------------------------------------------
    > 
    > This seems to execute since if we introduce a deliberate error we get a warning on reboot.
    > But with the line exactly as above we get no warnings, no server.log file is generated and the postmaster task is not visible if we run "ps -A" as root.
    
    > Any help would be gratefully received including alternative methods of forcing Postgres to initialize on reboot.
    > 
    > Many Thanks,
    > 
    > Matthew Green
    
    Matthew, I use this line as printed on a slackware box except the port 
    (5432) and the redirect at the end - on mine it is to (>) /dev/null and 
    here you have it reversed.  Is this simply a typo in your email?
    
    For RedHat:
    
    What follows is Lamar Owen's script (RedHat) for firing up PG.
    I simply place a call to it in rc.local so it starts on boot.
    (I keep my hacked copy of Lamar's file in /usr/local/bin, the original
    muzzled any logging output.) Note the rm -f of any stale locks.
    		
    Here is the line that turns on logging...
    su -l postgres -c '/usr/bin/postmaster -i -D/var/lib/pgsql >> /var/lib/pgsql/postlog 2>&1 &' >/dev/null
    
    Cheers,
    Tom
    ----
    
    Here is the script:
    
    #! /bin/sh
    # postgresql	This is the init script for starting up the PostgreSQL
    #		server
    
    # Version 6.5.2-0.2lo Lamar Owen
    # Added code to determine if PGDATA exists, whether it is current version
    #     or not, and initdb if no PGDATA (initdb will not overwrite a database).
    
    # 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 -D/var/lib/pgsql >> /var/lib/pgsql/postlog 2>&1 &' >/dev/null
    		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
    
    
    --------------------------------------------------------------------
                   SVCMC - Center for Behavioral Health                  
    --------------------------------------------------------------------
    Thomas Good                          tomg@ { admin | q8 } .nrnet.org
    IS Coordinator / DBA                 Phone: 718-354-5528 
                                         Fax:   718-354-5056  
    --------------------------------------------------------------------
    Powered by:  PostgreSQL     s l a c k w a r e          FreeBSD:
                   RDBMS       |---------- linux      The Power To Serve
    --------------------------------------------------------------------
    
    
    
    
  3. Re: Failing to boot Postgres on Red Hat Linux

    Tom Lane <tgl@sss.pgh.pa.us> — 2000-08-31T21:52:54Z

    "Matthew Green" <Matthewgreen@intelfax.co.uk> writes:
    > pg:2345:respawn:/bin/su - postgres -c "/usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data >> /usr/local/pgsql/logs/server.log 2>&1 </dev/null"
    
    > This seems to execute since if we introduce a deliberate error we get a warning on reboot.
    > But with the line exactly as above we get no warnings, no server.log file is generated and the postmaster task is not visible if we run "ps -A" as root.
    
    Hmm.  If the server.log file is not getting created, then the postmaster
    has never had a chance to start, because that file would be opened
    before the postmaster is exec'd from su.
    
    Two thoughts: (a) does user postgres have write permission on the
    directory /usr/local/pgsql/logs?  (b) are you sure that your standard
    runlevel is one of 2,3,4,5?  (see the init line in inittab)
    
    			regards, tom lane