ITPub博客

首页 > Linux操作系统 > Linux操作系统 > postgresql执行档

postgresql执行档

原创 Linux操作系统 作者:bontonpan 时间:2009-01-30 12:51:13 0 删除 编辑

#! /bin/sh
# postgresql    This is the init script. for starting up the PostgreSQL
#               server
#
# chkconfig: 2345 85 15
# description: Starts and stops the PostgreSQL backend daemon that handles \
#              all database requests.
# processname: postmaster
# pidfile: /var/run/postmaster.pid

# 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).

# Version 7.0 Lamar Owen
# Added logging code
# Changed PGDATA.
#

# Version 7.0.2 Trond Eivind Glomsrd
# use functions, add conditional restart

# Version 7.0.3 Lamar Owen
# Check for the existence of functions before blindly using them
# in particular -- check for success () and failure () before using.
# More Cross-distribution support -- PGVERSION variable, and docdir checks.

# Version 7.1 Release Candidate Lamar Owen
# initdb parameters have changed.

# Version 7.1.2 Trond Eivind Glomsrd
# Specify shell for su
# Handle stop better - kill unwanted output, make it wait until the database is ready
# Handle locales slightly differently - always using "C" isn't a valid option
# Kill output from database initialization
# Mark messages for translation

# Version 7.1.2-2.PGDG Lamar Owen
# sync up.
# Karl's fixes for some quoting issues.

# Version 7.2b2 Lamar Owen
# version change.

# Version 7.2 final.  Lamar Owen
# reload from Peter E.
# Eliminate the pidof postmaster test in stop -- we're using pg_ctl so we don't need pidof.
# Tested the $? return for the stop script. -- it does in fact propagate.
# TODO: multiple postmasters.
# VErsion 7.3 Lamar OWen
# Multiple postmasters, courtesy Karl DeBisschop

# PGVERSION is:
#PGVERSION=8.0
PGVERSION=8.1

# Source function library.
INITD=/etc/rc.d/init.d
. $INITD/functions

# Get function listing for cross-distribution logic.
TYPESET=`typeset -F`
# Get config.
. /etc/sysconfig/network

# Find the name of the script
NAME=`basename $0`

# Set defaults for port and database directory
PGPORT=5432
#export PGDATA=/var/lib/pgsql
export PGDATA=/usr/local/pgsql
if [ -f $PGDATA/PG_VERSION ] && [ -d $PGDATA/base/template1 ]
then
        gprintf "Using old-style. directory structure\n"
else
        #export PGDATA=/var/lib/pgsql/data
        export PGDATA=/usr/local/pgsql/data
fi

# Override defaults from /etc/sysconfig/pgsql if file is present
[ -f /etc/sysconfig/pgsql/${NAME} ] && . /etc/sysconfig/pgsql/${NAME}
export PGDATA
export PGPORT
export PGOPTS

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

#[ -f /usr/bin/postmaster ] || exit 0
[ -f /usr/local/pgsql/bin/postmaster ] || exit 0

start(){
        PSQL_START=$"Starting ${NAME} service: "


 # Check for the PGDATA structure
        if [ -f $PGDATA/PG_VERSION ] && [ -d $PGDATA/base ]
        then
        # Check version of existing PGDATA

                #if [ `cat $PGDATA/PG_VERSION` != '8.0' ]
                if [ `cat $PGDATA/PG_VERSION` != '8.1' ]
                then
                        SYSDOCDIR="(Your System's documentation directory)"
                        if [ -d /usr/doc/postgresql-$PGVERSION ]
                        then
                                SYSDOCDIR=/usr/doc
                        fi
                        if [ -d /usr/share/doc/postgresql-$PGVERSION ]
                        then
                                SYSDOCDIR=/usr/share/doc
                        fi
                        if [ -d /usr/doc/packages/postgresql-$PGVERSION ]
                        then
                                SYSDOCDIR=/usr/doc/packages
                        fi
                        if [ -d /usr/share/doc/packages/postgresql-$PGVERSION ]
                        then
                                SYSDOCDIR=/usr/share/doc/packages
                        fi
                        echo
                        gprintf "An old version of the database format was found.\nYou need to upgrade the data format before using PostgreSQL.\nSee %s/pos
tgresql-%s/README.rpm-dist for more information.\n" "$SYSDOCDIR" "$PGVERSION"
                        exit 1
                fi

        # No existing PGDATA! Initdb it.

        else
                gprintf "Initializing database: "
                if [ ! -d $PGDATA ]
                then
                        mkdir -p $PGDATA
                        chown postgres.postgres $PGDATA
                        chmod go-rwx $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=$PGDATA > /dev/null 2>&1" < /dev/null
                su -l postgres -s /bin/sh -c "/usr/local/pgsql/bin/initdb --pgdata=$PGDATA > /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...
  # note that pg_ctl only looks at the data structures in PGDATA
  # you really do need the pidof()
        #pid=`pidof -s /usr/bin/postmaster`
        pid=`pidof -s /usr/local/pgsql/bin/postmaster`
        #if [ $pid ] && /usr/bin/pg_ctl status -D $PGDATA > /dev/null 2>&1
        if [ $pid ] && /usr/local/pgsql/bin/pg_ctl status -D $PGDATA > /dev/null 2>&1
        then
                gprintf "Postmaster already running.\n"
        else
                #all systems go -- remove any stale lock files
                rm -f /tmp/.s.PGSQL.${PGPORT} > /dev/null
                gprintf "%s" "$PSQL_START"
                #su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl  -D $PGDATA -p /usr/bin/postmaster -o '-i -p ${PGPORT}' start  > /dev/null 2>&1" < /dev/null
                su -l postgres -s /bin/sh -c "/usr/local/pgsql/bin/pg_ctl  -D $PGDATA -p /usr/local/pgsql/bin/postmaster -o '-i -p ${PGPORT}' start  > /dev
/null 2>&1" < /dev/null
                sleep 1
                #pid=`pidof -s /usr/bin/postmaster`
                pid=`pidof -s /usr/local/pgsql/bin/postmaster`
                if [ $pid ]
                then
                        if echo "$TYPESET"|grep "declare -f success" >/dev/null
                        then
                                success "%s" "$PSQL_START"
                        else
                                gprintf "  [ OK ]\n"
                        fi
                        touch /var/lock/subsys/${NAME}
                        echo $pid > /var/run/postmaster.${PGPORT}.pid
                        echo
                else
                        if echo "$TYPESET"|grep "declare -f failure" >/dev/null
                        then
                                failure "%s" "$PSQL_START"
else
                                gprintf " [ FAILED ]\n"
                        fi
                        echo
                fi
        fi
}

stop(){
        PSQL_STOP=$"Stopping ${NAME} service: "
        #su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl stop -D $PGDATA -s -m fast" > /dev/null 2>&1
        su -l postgres -s /bin/sh -c "/usr/local/pgsql/bin/pg_ctl stop -D $PGDATA -s -m fast" > /dev/null 2>&1
        ret=$?
        if [ $ret -eq 0 ]
        then
                if echo "$TYPESET"|grep "declare -f success" >/dev/null
                then
                        success "%s" "$PSQL_STOP"
                else
                        gprintf "  [ OK ]\n"
                fi

        else
                if echo "$TYPESET"|grep "declare -f failure" >/dev/null
                then
                        failure "%s" "$PSQL_START"
                else
                        gprintf "  [ FAILED ]\n"
                fi

        fi
        echo
        rm -f /var/run/postmaster.${PGPORT}.pid
        rm -f /var/lock/subsys/${NAME}
}

restart(){
    stop
    start
}

condrestart(){
    [ -e /var/lock/subsys/${NAME} ] && restart
}


reload(){
    #su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl reload -D $PGDATA -s" > /dev/null 2>&1
    su -l postgres -s /bin/sh -c "/usr/local/pgsql/bin/pg_ctl reload -D $PGDATA -s" > /dev/null 2>&1
}

# 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
        ;;
  reload|force-reload)
        reload
        ;;
  *)
        gprintf "Usage: %s {start|stop|status|restart|condrestart|reload|force-reload}\n" "$0"
        exit 1
esac

exit 0

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11754813/viewspace-544786/,如需转载,请注明出处,否则将追究法律责任。

上一篇: winbindd 执行档
下一篇: i18n language setting
请登录后发表评论 登录
全部评论

注册时间:2009-01-30

  • 博文量
    52
  • 访问量
    36708