diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/pg_ctl/Makefile | 6 | ||||
-rwxr-xr-x | src/bin/pg_ctl/pg_ctl.sh | 159 |
2 files changed, 105 insertions, 60 deletions
diff --git a/src/bin/pg_ctl/Makefile b/src/bin/pg_ctl/Makefile index 716d93cea2b..fb4234dcc84 100644 --- a/src/bin/pg_ctl/Makefile +++ b/src/bin/pg_ctl/Makefile @@ -4,7 +4,7 @@ # # Copyright (c) 1999, PostgreSQL Global Development Group # -# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Makefile,v 1.9 2000/09/17 13:02:35 petere Exp $ +# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Makefile,v 1.10 2000/11/25 17:17:30 petere Exp $ # #------------------------------------------------------------------------- @@ -15,7 +15,9 @@ include $(top_builddir)/src/Makefile.global all: pg_ctl pg_ctl: pg_ctl.sh - cp $< $@ + sed -e 's/@VERSION@/$(VERSION)/g' \ + -e 's,@bindir@,$(bindir),g' \ + $< >$@ chmod a+x $@ install: all installdirs diff --git a/src/bin/pg_ctl/pg_ctl.sh b/src/bin/pg_ctl/pg_ctl.sh index 2c98f41ecdb..aea4a986909 100755 --- a/src/bin/pg_ctl/pg_ctl.sh +++ b/src/bin/pg_ctl/pg_ctl.sh @@ -8,14 +8,50 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.13 2000/10/24 19:11:15 petere Exp $ +# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.14 2000/11/25 17:17:30 petere Exp $ # #------------------------------------------------------------------------- + CMDNAME=`basename $0` +help="\ +$CMDNAME is a utility to start, stop, restart, and report the status +of a PostgreSQL server. + +Usage: + $CMDNAME start [-w] [-D DATADIR] [-p PATH-TO-POSTMASTER] [-o \"OPTIONS\"] + $CMDNAME stop [-w] [-D DATADIR] [-m SHUTDOWN-MODE] + $CMDNAME restart [-w] [-D DATADIR] [-m SHUTDOWN-MODE] [-o \"OPTIONS\"] + $CMDNAME status [-D DATADIR] + +Options: + -D DATADIR Location of the database storage area + -m SHUTDOWN-MODE May be 'smart', 'fast', or 'immediate' + -o OPTIONS Command line options to pass to the postmaster + (PostgreSQL server executable) + -p PATH-TO-POSTMASTER Normally not necessary + -w Wait until operation completes + +If the -D option is omitted, the environment variable PGDATA is used. + +Shutdown modes are: + smart Quit after all clients have disconnected + fast Quit directly, with proper shutdown + immediate Quit without complete shutdown; will lead + to recovery run on restart + +Report bugs to <pgsql-bugs@postgresql.org>." + +advice="\ +Try '$CMDNAME --help' for more information." + + +# Placed here during build +bindir='@bindir@' +VERSION='@VERSION@' + # Check for echo -n vs echo \c -ECHO=echo if echo '\c' | grep -s c >/dev/null 2>&1 then ECHO_N="echo -n" @@ -28,38 +64,35 @@ fi # # Find out where we're located # -if $ECHO "$0" | grep '/' > /dev/null 2>&1 +if echo "$0" | grep '/' > /dev/null 2>&1 then # explicit dir name given - PGPATH=`$ECHO $0 | sed 's,/[^/]*$,,'` # (dirname command is not portable) + self_path=`echo $0 | sed 's,/[^/]*$,,'` # (dirname command is not portable) else # look for it in PATH ('which' command is not portable) - for dir in `$ECHO "$PATH" | sed 's/:/ /g'` + for dir in `echo "$PATH" | sed 's/:/ /g'` do # empty entry in path means current dir [ -z "$dir" ] && dir='.' if [ -f "$dir/$CMDNAME" ] then - PGPATH="$dir" + self_path="$dir" break fi done fi # Check if needed programs actually exist in path -for prog in postmaster psql -do - if [ ! -x "$PGPATH/$prog" ] - then - $ECHO "The program $prog needed by $CMDNAME could not be found. It was" - $ECHO "expected at:" - $ECHO " $PGPATH/$prog" - $ECHO "If this is not the correct directory, please start $CMDNAME" - $ECHO "with a full search path. Otherwise make sure that the program" - $ECHO "was installed successfully." - exit 1 - fi -done +if [ -x "$self_path/postmaster" ] && [ -x "$self_path/psql" ]; then + PGPATH=$self_path +elif [ -x "$bindir/postmaster" ] && [ -x "$bindir/psql" ]; then + PGPATH=$bindir +else + echo "The programs 'postmaster' and 'psql' are needed by $CMDNAME but" 1>&2 + echo "were not found in the directory '$bindir'." 1>&2 + echo "Check your installation." 1>&2 + exit 1 +fi po_path=$PGPATH/postmaster @@ -69,14 +102,17 @@ sig="-TERM" while [ "$#" -gt 0 ] do case $1 in - -h|--help) - usage=1 - break - ;; + -h|--help|-\?) + echo "$help" + exit 0 + ;; + -V|--version) + echo "pg_ctl (PostgreSQL) $VERSION" + exit 0 + ;; -D) shift PGDATA="$1" - export PGDATA ;; -p) shift @@ -94,8 +130,9 @@ do sig="-QUIT" ;; *) - $ECHO "$CMDNAME: Wrong shutdown mode $sigopt" - usage=1 + echo "$CMDNAME: wrong shutdown mode: $1" 1>&2 + echo "$advice" 1>&2 + exit 1 ;; esac ;; @@ -106,6 +143,11 @@ do shift POSTOPTS="$1" ;; + -*) + echo "$CMDNAME: invalid option: $1" 1>&2 + echo "$advice" 1>&2 + exit 1 + ;; start) op="start" ;; @@ -119,23 +161,23 @@ do op="status" ;; *) - usage=1 - break + echo "$CMDNAME: invalid operation mode: $1" 1>&2 + echo "$advice" 1>&2 + exit 1 ;; esac shift done -if [ "$usage" = 1 -o "$op" = "" ];then - $ECHO "Usage: $CMDNAME [-w][-D database_dir][-p path_to_postmaster][-o \"postmaster_opts\"] start" - $ECHO " $CMDNAME [-w][-D database_dir][-m s[mart]|f[ast]|i[mmediate]] stop" - $ECHO " $CMDNAME [-w][-D database_dir][-m s[mart]|f[ast]|i[mmediate]][-o \"postmaster_opts\"] restart" - $ECHO " $CMDNAME [-D database_dir] status" +if [ x"$op" = x"" ];then + echo "$CMDNAME: no operation mode specified" 1>&2 + echo "$advice" 1>&2 exit 1 fi if [ -z "$PGDATA" ];then - $ECHO "$CMDNAME: No database directory or environment variable \$PGDATA is specified" + echo "$CMDNAME: no database directory or environment variable \$PGDATA is specified" 1>&2 + echo "$advice" 1>&2 exit 1 fi @@ -148,15 +190,15 @@ if [ $op = "status" ];then PID=`cat $PIDFILE` if [ $PID -lt 0 ];then PID=`expr 0 - $PID` - $ECHO "$CMDNAME: postgres is running (pid: $PID)" + echo "$CMDNAME: postgres is running (pid: $PID)" else - $ECHO "$CMDNAME: postmaster is running (pid: $PID)" - $ECHO "options are:" - $ECHO "`cat $POSTOPTSFILE`" + echo "$CMDNAME: postmaster is running (pid: $PID)" + echo "Command line was:" + echo "`cat $POSTOPTSFILE`" fi exit 0 else - $ECHO "$CMDNAME: postmaster or postgres is not running" + echo "$CMDNAME: postmaster or postgres is not running" exit 1 fi fi @@ -166,8 +208,8 @@ if [ $op = "stop" -o $op = "restart" ];then PID=`cat $PIDFILE` if [ $PID -lt 0 ];then PID=`expr 0 - $PID` - $ECHO "$CMDNAME: Cannot restart postmaster. postgres is running (pid: $PID)" - $ECHO "Please terminate postgres and try again" + echo "$CMDNAME: Cannot restart postmaster. postgres is running (pid: $PID)" + echo "Please terminate postgres and try again" exit 1 fi @@ -176,7 +218,7 @@ if [ $op = "stop" -o $op = "restart" ];then # wait for postmaster shutting down if [ "$wait" = 1 -o $op = "restart" ];then cnt=0 - $ECHO_N "Waiting for postmaster shutting down.."$ECHO_C + $ECHO_N "Waiting for postmaster to shut down.."$ECHO_C while : do @@ -184,7 +226,7 @@ if [ $op = "stop" -o $op = "restart" ];then $ECHO_N "."$ECHO_C cnt=`expr $cnt + 1` if [ $cnt -gt 60 ];then - $ECHO "$CMDNAME: postmaster does not shut down" + echo "$CMDNAME: postmaster does not shut down" exit 1 fi else @@ -192,16 +234,16 @@ if [ $op = "stop" -o $op = "restart" ];then fi sleep 1 done - $ECHO "done." + echo "done" fi - $ECHO "postmaster successfully shut down." + echo "postmaster successfully shut down" else - $ECHO "$CMDNAME: Can't find $PIDFILE." - $ECHO "Is postmaster running?" + echo "$CMDNAME: cannot find $PIDFILE" + echo "Is postmaster running?" if [ $op = "restart" ];then - $ECHO "Anyway, I'm going to start up postmaster..." + echo "starting postmaster anyway..." else exit 1 fi @@ -210,7 +252,7 @@ fi if [ $op = "start" -o $op = "restart" ];then if [ -f $PIDFILE ];then - $ECHO "$CMDNAME: It seems another postmaster is running. Try to start postmaster anyway." + echo "$CMDNAME: It seems another postmaster is running. Trying to start postmaster anyway." pid=`cat $PIDFILE` fi @@ -219,21 +261,22 @@ if [ $op = "start" -o $op = "restart" ];then if [ $op = "start" ];then # if we are in start mode, then look for postmaster.opts.default if [ -f $DEFPOSTOPTS ];then - eval "$po_path `cat $DEFPOSTOPTS`" & + $po_path -D $PGDATA `cat $DEFPOSTOPTS` & else - $po_path & + $po_path -D $PGDATA & fi else # if we are in restart mode, then look postmaster.opts - eval `cat $POSTOPTSFILE` & + `cat $POSTOPTSFILE` & fi else - eval "$po_path $POSTOPTS " & + # -o given + $po_path -D $PGDATA $POSTOPTS & fi if [ -f $PIDFILE ];then if [ "`cat $PIDFILE`" = "$pid" ];then - $ECHO "$CMDNAME: Cannot start postmaster. Is another postmaster is running?" + echo "$CMDNAME: Cannot start postmaster. Is another postmaster is running?" exit 1 fi fi @@ -241,7 +284,7 @@ if [ $op = "start" -o $op = "restart" ];then # wait for postmaster starting up if [ "$wait" = 1 ];then cnt=0 - $ECHO_N "Waiting for postmaster starting up.."$ECHO_C + $ECHO_N "Waiting for postmaster to start up.."$ECHO_C while : do if psql -l >/dev/null 2>&1 @@ -251,16 +294,16 @@ if [ $op = "start" -o $op = "restart" ];then $ECHO_N "."$ECHO_C cnt=`expr $cnt + 1` if [ $cnt -gt 60 ];then - $ECHO "$CMDNAME: postmaster does not start up" + echo "$CMDNAME: postmaster does not start up" exit 1 fi sleep 1 fi done - $ECHO "done." + echo "done" fi - $ECHO "postmaster successfully started up." + echo "postmaster successfully started up" fi exit 0 |