Обсуждение: starting PGSQL automatically on Redhat 6.2
Hey all, I copied the pg_ctl script and placed it in my /etc/rc.d/init.d/ directory and renamed it 'postgres'. I then made all the necessary symbolic links. When my machine boots up however, pgsql does not start up because it cannot be started by root. I have created the 'postgres' user and data directories. I can start PG manually just fine. Can someone post or mail a working startup script/recommend any changes to pg_ctl? Thanks! Ryan Mahoney ryan@paymentalliance.net
Ryan Mahoney wrote:
> Hey all, I copied the pg_ctl script and placed it in my /etc/rc.d/init.d/
> directory and renamed it 'postgres'. I then made all the necessary symbolic
> links. When my machine boots up however, pgsql does not start up because it
> cannot be started by root. I have created the 'postgres' user and data
> directories. I can start PG manually just fine. Can someone post or mail a
> working startup script/recommend any changes to pg_ctl? Thanks!
>
> Ryan Mahoney
> ryan@paymentalliance.net
You might try this, it was taken from the postgresql-6.5.3-6 rpm:
#! /bin/sh
# postgresql This is the init script for starting up the PostgreSQL
# server
# Version 6.5.3-2 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.3/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
On Tue, 9 Jan 2001, Ryan Mahoney wrote:
> Hey all, I copied the pg_ctl script and placed it in my /etc/rc.d/init.d/
> directory and renamed it 'postgres'. I then made all the necessary symbolic
> links. When my machine boots up however, pgsql does not start up because it
> cannot be started by root. I have created the 'postgres' user and data
> directories. I can start PG manually just fine. Can someone post or mail a
> working startup script/recommend any changes to pg_ctl? Thanks!
You need to su to the postgres user in your script to start the
postmaster:
su postgres -c "postmaster -i ... "
There's a complete example in the installation docs.
-- Brett
http://www.chapelperilous.net/~bmccoy/
---------------------------------------------------------------------------
History is the version of past events that people have decided to agree on.
-- Napoleon Bonaparte, "Maxims"
From: T F <torford@hotmail.nospam.com>
Subject: [GENERAL] Re: starting PGSQL automatically on Redhat 6.2
Date: Tue, 09 Jan 2001 12:12:52 -0700
Message-ID: <3A5B62B4.C73124BE@hotmail.nospam.com>
> Ryan Mahoney wrote:
>
> > Hey all, I copied the pg_ctl script and placed it in my /etc/rc.d/init.d/
> > directory and renamed it 'postgres'. I then made all the necessary symbolic
> > links. When my machine boots up however, pgsql does not start up because it
> > cannot be started by root. I have created the 'postgres' user and data
> > directories. I can start PG manually just fine. Can someone post or mail a
> > working startup script/recommend any changes to pg_ctl? Thanks!
> >
> > Ryan Mahoney
> > ryan@paymentalliance.net
>
> You might try this, it was taken from the postgresql-6.5.3-6 rpm:
>
>
That script seems dangerous. It calls
killproc postmaster
to terminate postmaster. In this case killproc firstly sends SIGTERM
to postmaster (this is ok). But if postmaster won't die with the
signal, then killproc sends SIGKILL to postmaster (this is not
good). SIGINT or SIGQUIT should be sent in this case.
BTW, pg_ctl only works with version 7.0 or higher.
--
Tatsuo Ishii
I'm actaully trying to get 7.1b to start automatically, still no success, but I'm making progres. Trying to modify the pg_ctl that comes with 7.1 to add the su - postgres -c .... -Ryan Tatsuo Ishii wrote in message <20010110111111X.t-ishii@sra.co.jp>... >From: T F <torford@hotmail.nospam.com> >Subject: [GENERAL] Re: starting PGSQL automatically on Redhat 6.2 >Date: Tue, 09 Jan 2001 12:12:52 -0700 >Message-ID: <3A5B62B4.C73124BE@hotmail.nospam.com> > >> Ryan Mahoney wrote: >> >> > Hey all, I copied the pg_ctl script and placed it in my /etc/rc.d/init.d/ >> > directory and renamed it 'postgres'. I then made all the necessary symbolic >> > links. When my machine boots up however, pgsql does not start up because it >> > cannot be started by root. I have created the 'postgres' user and data >> > directories. I can start PG manually just fine. Can someone post or mail a >> > working startup script/recommend any changes to pg_ctl? Thanks! >> > >> > Ryan Mahoney >> > ryan@paymentalliance.net >> >> You might try this, it was taken from the postgresql-6.5.3-6 rpm: >> >> > >That script seems dangerous. It calls > > killproc postmaster > >to terminate postmaster. In this case killproc firstly sends SIGTERM >to postmaster (this is ok). But if postmaster won't die with the >signal, then killproc sends SIGKILL to postmaster (this is not >good). SIGINT or SIGQUIT should be sent in this case. > >BTW, pg_ctl only works with version 7.0 or higher. >-- >Tatsuo Ishii
On Wed, Jan 10, 2001 at 12:17:23PM -0000, Ryan Mahoney wrote:
> I'm actaully trying to get 7.1b to start automatically, still no success,
> but I'm making progres.
>
> Trying to modify the pg_ctl that comes with 7.1 to add the su - postgres -c
I added the following to the postgres account's .profile:
export PGDATA=${HOME}/data
I then had to use the following in my startup script:
su - postgres -- --login -c "pg_ctl -o -S start"
su - postgres -- --login -c "pg_ctl stop"
The reason for the --login is that the bash/gnu-su combination is broken (IMO)
wrt to sourcing .profile when ran from su.
mrc
--
Mike Castle Life is like a clock: You can work constantly
dalgoda@ix.netcom.com and be right all the time, or not work at all
www.netcom.com/~dalgoda/ and be right at least twice a day. -- mrc
We are all of us living in the shadow of Manhattan. -- Watchmen