Обсуждение: Intermittent Startup Failures
I have users experiencing problems with PostgreSQL failing to start up consistently when their machines reboot. (The reboot may or may not be a result of a machine lockup.) No messages have been logged to the /var/log/messages file other than "startup failed", but executing the startup script by hand then successfully starts PostgreSQL. I have also seen the "starup failed" message displayed on reboot, logged to the messages file, but when I checked, postmaster acually is running and I was able to start psql. I'm not a script file or Linux guru, but need to get to the bottom of this problem. Sorry I cannot provide more data, but any suggestions to help me debug this problem would be appreciated. BTW, I'm using PostgreSQL 7.1 with Linux 7.0.
There may be some errors in the script that's loads postgres at startup. Look in the "/etc/rc.d/init/" directory and see if there is an executable named postgres or something similar. If so, post the source of this file to the group so we can take a look. Good Luck! -Ryan Mahoney At 10:22 AM 7/18/01 -0700, Debra LaVille wrote: >I have users experiencing problems with PostgreSQL failing to start up >consistently when their machines reboot. (The reboot may or may not be a >result of a machine lockup.) No messages have been logged to the >/var/log/messages file other than "startup failed", but executing the >startup script by hand then successfully starts PostgreSQL. I have also seen >the "starup failed" message displayed on reboot, logged to the messages >file, but when I checked, postmaster acually is running and I was able to >start psql. I'm not a script file or Linux guru, but need to get to the >bottom of this problem. Sorry I cannot provide more data, but any >suggestions to help me debug this problem would be appreciated. BTW, I'm >using PostgreSQL 7.1 with Linux 7.0. > > > > >---------------------------(end of broadcast)--------------------------- >TIP 5: Have you checked our extensive FAQ? > >http://www.postgresql.org/users-lounge/docs/faq.html > > > >--- >Incoming mail is certified Virus Free. >Checked by AVG anti-virus system (http://www.grisoft.com). >Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01 --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01
Debra LaVille wrote: <snip> > suggestions to help me debug this problem would be appreciated. BTW, I'm > using PostgreSQL 7.1 with Linux 7.0. > There is no Linux 7.0. You probably mean redhat 7.0 which shipped with a broken glibc. Upgrade your glibc rpms and see if that changes anything. Also make sure the startup script is symlinked in the right directory. You may have in in rc3.d but the machine is startingup in runlevel 5. -- Joseph Shraibman jks@selectacast.net Increase signal to noise ratio. http://www.targabot.com
I'm using the script file included with the postgresql distribution:
***********************************************************************
# PGVERSION is:
PGVERSION=7.1.2
# Source function library.
INITD=/etc/rc.d/init.d
. $INITD/functions
# Get function listing for cross-distribution logic.
#TYPESET=`typeset -f|grep "declare"`
# 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
start(){
PSQL_START=$"Starting postgresql service: "
export PGDATA=/var/lib/pgsql/data
if [ ! -d $PGDATA/base ]
then
# Check version of existing PGDATA
# No existing PGDATA! Initdb it.
echo -n $"Initializing database: "
if [ ! -d $PGDATA ]
then
mkdir -p $PGDATA
chown postgres.postgres $PGDATA
fi
# 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
[ ! -f /etc/sysconfig/i18n ] && echo "LANG=en_US" >
$PGDATA/../initdb.i18n
# Is expanded this early to be used in the command su runs
echo "export LANG LC_ALL LC_CTYPE LC_COLLATE LC_NUMERIC
LC_CTYPE LC_TIME" >> $PGDATA/../initdb.i18n
# Initialize the database
su -l postgres -s /bin/sh -c "/usr/bin/initdb
--pgdata=/var/lib/pgsql/data > /dev/null 2>&1" < /dev/null
[ -f $PGDATA/PG_VERSION ] && echo_success
[ ! -f $PGDATA/PG_VERSION ] && echo_failure
echo
fi
# Check for postmaster already running...
pid=`pidof -s 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 "$PSQL_START"
su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -D $PGDATA -p
/usr/bin/postmaster start > /dev/null 2>&1" < /dev/null
sleep 1
pid=`pidof -s postmaster`
if [ $pid ]
then
echo " [ OK ]"
touch /var/lock/subsys/postgresql
echo $pid > /var/run/postmaster.pid
echo
else
echo " [ FAILED ]"
echo
fi
fi
}
stop(){
echo -n $"Stopping postgresql service: "
# Check for older PGDATA location.
export PGDATA=/var/lib/pgsql/data
su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl stop -D $PGDATA -s -m
fast" > /dev/null 2>&1
ret=$? # This will always be 0, as the return code doesn't
propagate... Fix that some day.
if [ $ret -eq 0 ]; then
echo_success
else
echo_failure
fi
echo
rm -f /var/run/postmaster.pid
rm -f /var/lock/subsys/postgresql
}
restart(){
stop
start
}
condrestart(){
[ -e /var/lock/subsys/postgresql ] && restart || :
}
# 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)
start
;;
stop)
stop
;;
status)
status postmaster
;;
restart)
restart
;;
condrestart)
condrestart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
exit 1
esac
exit 0
****************************************************************************
***
-----Original Message-----
From: Ryan Mahoney [mailto:ryan@paymentalliance.net]
Sent: Wednesday, July 18, 2001 12:43 PM
To: Debra LaVille; pgsql-general@postgresql.org
Subject: Re: Intermittent Startup Failures
There may be some errors in the script that's loads postgres at
startup. Look in the "/etc/rc.d/init/" directory and see if there is an
executable named postgres or something similar. If so, post the source of
this file to the group so we can take a look.
Good Luck!
-Ryan Mahoney
At 10:22 AM 7/18/01 -0700, Debra LaVille wrote:
>I have users experiencing problems with PostgreSQL failing to start up
>consistently when their machines reboot. (The reboot may or may not be a
>result of a machine lockup.) No messages have been logged to the
>/var/log/messages file other than "startup failed", but executing the
>startup script by hand then successfully starts PostgreSQL. I have also
seen
>the "starup failed" message displayed on reboot, logged to the messages
>file, but when I checked, postmaster acually is running and I was able to
>start psql. I'm not a script file or Linux guru, but need to get to the
>bottom of this problem. Sorry I cannot provide more data, but any
>suggestions to help me debug this problem would be appreciated. BTW, I'm
>using PostgreSQL 7.1 with Linux 7.0.
>
>
>
>
>---------------------------(end of broadcast)---------------------------
>TIP 5: Have you checked our extensive FAQ?
>
>http://www.postgresql.org/users-lounge/docs/faq.html
>
>
>
>---
>Incoming mail is certified Virus Free.
>Checked by AVG anti-virus system (http://www.grisoft.com).
>Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01
Debra LaVille <debra.laville@digeo.com> writes:
> I'm using the script file included with the postgresql distribution:
Hmm, is this from an RPM? It's certainly not part of what *I* consider
the Postgres distribution ...
> #all systems go -- remove any stale lock files
> rm -f /tmp/.s.PGSQL.* > /dev/null
> echo -n "$PSQL_START"
> su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -D $PGDATA -p
> /usr/bin/postmaster start > /dev/null 2>&1" < /dev/null
> sleep 1
> pid=`pidof -s postmaster`
> if [ $pid ]
> then
> echo " [ OK ]"
> touch /var/lock/subsys/postgresql
> echo $pid > /var/run/postmaster.pid
> echo
> else
> echo " [ FAILED ]"
> echo
> fi
Since this thing is sending the postmaster's stderr output to /dev/null,
it's impossible to tell what's going wrong. Change the su line to be
something like
su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -D $PGDATA -p /usr/bin/postmaster start >> /some/handy/logfile 2>&1" <
/dev/null
and then let us know what you see in /some/handy/logfile after you get a
failure.
regards, tom lane