]> granicus.if.org Git - postgresql/commitdiff
pg_ctl: a script to start/stop/restart and report status of postmaster.
authorTatsuo Ishii <ishii@postgresql.org>
Mon, 6 Dec 1999 07:23:41 +0000 (07:23 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Mon, 6 Dec 1999 07:23:41 +0000 (07:23 +0000)
src/bin/pg_ctl/Makefile [new file with mode: 0644]
src/bin/pg_ctl/pg_ctl.sh [new file with mode: 0755]

diff --git a/src/bin/pg_ctl/Makefile b/src/bin/pg_ctl/Makefile
new file mode 100644 (file)
index 0000000..208f42f
--- /dev/null
@@ -0,0 +1,28 @@
+#-------------------------------------------------------------------------
+#
+# Makefile.inc--
+#    Makefile for bin/pg_ctl
+#
+# Copyright (c) 1999, PostgreSQL Global Development Group
+#
+#
+# IDENTIFICATION
+#    $Header: /cvsroot/pgsql/src/bin/pg_ctl/Makefile,v 1.1 1999/12/06 07:23:41 ishii Exp $
+#
+#-------------------------------------------------------------------------
+
+SRCDIR= ../..
+include ../../Makefile.global
+
+all: pg_ctl
+
+pg_ctl: pg_ctl.sh
+       sed -e 's@__BINDIR__@$(BINDIR)@' pg_ctl.sh > pg_ctl
+
+install: pg_ctl
+       $(INSTALL) $(INSTL_EXE_OPTS) $< $(BINDIR)/$<
+
+clean:
+       rm -f pg_ctl
+
+dep depend:
diff --git a/src/bin/pg_ctl/pg_ctl.sh b/src/bin/pg_ctl/pg_ctl.sh
new file mode 100755 (executable)
index 0000000..673e5a2
--- /dev/null
@@ -0,0 +1,191 @@
+#! /bin/sh
+#-------------------------------------------------------------------------
+#
+# pg_ctl.sh--
+#    Start/Stop/Restart/Report status of postmaster
+#
+# Copyright (c) 1999, PostgreSQL Global Development Group
+#
+#
+# IDENTIFICATION
+#    $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.1 1999/12/06 07:23:41 ishii Exp $
+#
+#-------------------------------------------------------------------------
+CMDNAME=`basename $0`
+
+# set default path to postmaster
+po_path=__BINDIR__/postmaster
+
+# set default shutdown signal
+sig="-TERM"
+
+while [ "$#" -gt 0 ]
+do
+    case $1 in
+       -h|--help)
+       usage=1
+       break
+       ;;
+       -D)
+           shift
+           PGDATA="$1"
+           ;;
+       -p)
+           shift
+           po_path="$1"
+           ;;
+       -m)
+           shift
+           case $1 in
+               f|fast)
+                   sig="-INT"
+                   ;;
+               i|immediate)
+                   sig="-QUIT"
+                   ;;
+           *)
+               echo "$CMDNAME: Wrong shutdown mode $sigopt"
+               usage=1
+               ;;
+           esac
+           ;;
+       -w)
+           wait=1
+           ;;
+       -o)
+           shift
+           POSTOPTS="$1"
+           ;;
+       start)
+           op="start"
+           ;;
+       stop)
+           op="stop"
+           ;;
+       restart)
+           op="restart"
+           ;;
+       status)
+           op="status"
+           ;;
+       *)
+           usage=1
+           break
+           ;;
+    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"
+    exit 1
+fi
+
+if [ -z "$PGDATA" ];then
+    echo "$CMDNAME: No database directory or environment variable \$PGDATA is specified"
+    exit 1
+fi
+
+DEFPOSTOPTS=$PGDATA/postmaster.opts.default
+POSTOPTSFILE=$PGDATA/postmaster.opts
+PIDFILE=$PGDATA/postmaster.pid
+
+if [ $op = "status" ];then
+    if [ -f $PIDFILE ];then
+       echo "$CMDNAME: postmaster is running (pid: `cat $PIDFILE`)"
+       echo "options are:"
+       echo "`cat $POSTOPTSFILE`"
+       exit 0
+    else
+       echo "$CMDNAME: postmaster is not running"
+       exit 1
+    fi
+fi
+
+if [ $op = "stop" -o $op = "restart" ];then
+    if [ -f $PIDFILE ];then
+       kill $sig `cat $PIDFILE`
+
+       # wait for postmaster shutting down
+       if [ "$wait" = 1 -o $op = "restart" ];then
+           cnt=0
+           echo -n "Waiting for postmaster shutting down.."
+
+           while :
+           do
+               if [ -f $PIDFILE ];then
+                   echo -n "."
+                   cnt=`expr $cnt + 1`
+                   if [ $cnt -gt 60 ];then
+                       echo "$CMDNAME: postmaster does not shut down"
+                       exit 1
+                   fi
+               else
+                   break
+               fi
+               sleep 1
+           done
+           echo "done."
+       fi
+
+    else
+       echo "$CMDNAME: Can't find $PIDFILE."
+       echo "Is postmaster running?"
+       if [ $op = "restart" ];then
+           echo "Anyway, I'm going to start up postmaster..."
+       else
+           exit 1
+       fi
+    fi
+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."
+       pid=`cat $PIDFILE`
+    fi
+
+    if [ -z "$POSTOPTS" ];then
+       if [ -f $DEFPOSTOPTS ];then
+           eval `cat $DEFPOSTOPTS` &
+       else
+           echo "$CMDNAME: Can't find $DEFPOSTOPTS"
+           exit 1
+       fi
+    else
+       $po_path $POSTOPTS &
+    fi
+
+    if [ -f $PIDFILE ];then
+       if [ "`cat $PIDFILE`" = "$pid" ];then
+           echo "$CMDNAME: Cannot start postmaster. Is another postmaster is running?"
+           exit 1
+        fi
+    fi
+
+    # wait for postmaster starting up
+    if [ "$wait" = 1 ];then
+       cnt=0
+       echo -n "Waiting for postmaster starting up.."
+       while :
+       do
+           if [ ! -f $PIDFILE ];then
+               echo -n "."
+               cnt=`expr $cnt + 1`
+               if [ $cnt -gt 60 ];then
+                   echo "$CMDNAME: postmaster does not start up"
+                   exit 1
+               fi
+               sleep 1
+           else
+               break
+           fi
+       done
+       echo "done."
+    fi
+fi
+
+exit 0